填充时在我的对象中插入了神秘的 "remove" 键
Mysterious "remove" key inserted in my object when populating it
我正在迭代一个数组(结果)并填充一个对象(testArray)。这是我的代码:
$.each(results, function(key, value)
{
console.log('value is');
console.log(value.Id);
testArray[value.Id] = value;
});
for(var key in testArray) {
console.log(key);
console.log(testArray[key].Name);
}
问题: 在遍历 testArray 时,最后打印的键是 "remove",与之关联的名称是 "undefined"。这样的 value.Id 作为 "remove" 不存在永远不会从 $.each.
打印出来
好的,如果它是一个对象,而不是一个数组(你的代码将它命名为 testArray
这真的很混乱),那么你可以这样做来消除已经添加到原型中的可枚举属性:
for (var key in testArray) {
if (testArray.hasOwnProperty(key)) {
console.log(testArray[key]);
}
}
之前的回答,虽然我们都认为 testArray
是一个数组。
这就是为什么你不应该用以下方式迭代数组的原因:
for (var key in testArray)
因为它迭代了数组对象的所有可枚举属性,而不仅仅是数组元素。您可能 运行 一些代码添加了一个新方法来执行您的 for/in
迭代所拾取的数组对象。
改为使用传统的 for
循环或使用 .forEach()
.
for (var i = 0; i < testArray.length; i++) {
console.log(testArray[i]);
}
或
testArray.forEach(function(item) {
console.log(item);
});
这些方法将仅枚举实际的数组元素,而不枚举可能已添加到 Array 对象的其他属性。
P.S。如果将方法设置为不可枚举,则可以将方法添加到数组中而不会遇到此问题,但您仍然不应该使用 for/in
迭代数组。此外,ES6 有一个新的 for/of
语法,可以安全地用于迭代数组,但它需要 ES6 环境。
我正在迭代一个数组(结果)并填充一个对象(testArray)。这是我的代码:
$.each(results, function(key, value)
{
console.log('value is');
console.log(value.Id);
testArray[value.Id] = value;
});
for(var key in testArray) {
console.log(key);
console.log(testArray[key].Name);
}
问题: 在遍历 testArray 时,最后打印的键是 "remove",与之关联的名称是 "undefined"。这样的 value.Id 作为 "remove" 不存在永远不会从 $.each.
打印出来好的,如果它是一个对象,而不是一个数组(你的代码将它命名为 testArray
这真的很混乱),那么你可以这样做来消除已经添加到原型中的可枚举属性:
for (var key in testArray) {
if (testArray.hasOwnProperty(key)) {
console.log(testArray[key]);
}
}
之前的回答,虽然我们都认为 testArray
是一个数组。
这就是为什么你不应该用以下方式迭代数组的原因:
for (var key in testArray)
因为它迭代了数组对象的所有可枚举属性,而不仅仅是数组元素。您可能 运行 一些代码添加了一个新方法来执行您的 for/in
迭代所拾取的数组对象。
改为使用传统的 for
循环或使用 .forEach()
.
for (var i = 0; i < testArray.length; i++) {
console.log(testArray[i]);
}
或
testArray.forEach(function(item) {
console.log(item);
});
这些方法将仅枚举实际的数组元素,而不枚举可能已添加到 Array 对象的其他属性。
P.S。如果将方法设置为不可枚举,则可以将方法添加到数组中而不会遇到此问题,但您仍然不应该使用 for/in
迭代数组。此外,ES6 有一个新的 for/of
语法,可以安全地用于迭代数组,但它需要 ES6 环境。