我有以下代码片段
data.forEach(function (row) {
var dataRow = [];
columns.forEach(function (column) {
dataRow.push(row[column].toString());
})
我遇到了一个错误,data.forEach(function (row) {
。这种情况应该使用什么替代方法?如何解决这个问题?
我有以下代码片段
data.forEach(function (row) {
var dataRow = [];
columns.forEach(function (column) {
dataRow.push(row[column].toString());
})
我遇到了一个错误,data.forEach(function (row) {
。这种情况应该使用什么替代方法?如何解决这个问题?
对于使用document.querySelectorAll('..').forEach()
并在IE 11中出现“forEach不是函数”的问题的任何人,我在Reddit上发现了一个技巧,可以很好地解决这个问题:
针对这个问题,可以使用以下代码作为hack来解决:
if (window.NodeList && !NodeList.prototype.forEach) {
NodeList.prototype.forEach = function (callback, thisArg) {
thisArg = thisArg || window;
for (var i = 0; i < this.length; i++) {
callback.call(thisArg, this[i], i, this);
}
};
}
if (typeof NodeList.prototype.forEach !== 'function') {
NodeList.prototype.forEach = Array.prototype.forEach;
}
这段代码完美运行,只需3行代码,而不需要使用 polyfill。
@JoeTaras 在他的答案中暗示了这一点(是的,IE自IE9以来就有 Array.forEach
),但我仍然认为我的答案有价值,并将帮助其他用户。
IE11
知道 forEach
语句(从 IE 9.0 开始兼容,详情请见这里),但是如果您想要,可以使用 for
语句代替 forEach
,如下所示:
我编辑了我的答案,在数据对象上添加了一个检查,以确定其是否为数组。
if (data != null && Array.isArray(data)) {
var dataRow = [];
for (var i = 0; i < data.length; i++) {
var row = data[i];
for (var j = 0; j < columns.length; i++) {
var column = columns[i];
dataRow.push(row[column].toString());
}
}
}
data
变量持有一个索引对象,这是一个很强的假设,因为它没有*#forEach*方法。+ 在for循环中的var foo=bar
... - Kaiidodata
不是一个数组。幸运的是,IE11支持Array#forEach。 - Kaiido
data
不是它应该的样子。我重新打开了 (save-link-to-prev-dupe-target)。但请注意,就目前而言,这个问题仍然应该关闭,因为它缺少一些信息和调试步骤,你应该在你的一侧进行(比如,在调用其不存在的 forEach 方法之前,data
是什么?) - Kaiidofor (var key in data) { if (data.hasOwnProperty(key)) { console.log(key + " -> " + data[key]); // 这里您将获得键和值 } }
- Ankit