Javascript “神秘的”;删除“;填充对象时插入到对象中的键

Javascript “神秘的”;删除“;填充对象时插入到对象中的键,javascript,arrays,object,key,Javascript,Arrays,Object,Key,我正在迭代一个数组(results)并填充一个对象(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);

我正在迭代一个数组(results)并填充一个对象(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”。像“remove”这样的值.Id不存在,永远不会从$.each中打印出来。

好的,如果它是一个对象,而不是一个数组(您的代码将其命名为
testArray
,这确实令人困惑),那么您可以这样做以消除已添加到原型中的可枚举属性:

for (var key in testArray) {
    if (testArray.hasOwnProperty(key)) {
        console.log(testArray[key]);
    }
}

以前的答案是当我们都认为testArray是一个数组时

这正是您永远不应该使用以下命令迭代数组的原因:

for (var key in testArray)
因为它会迭代数组对象的所有可枚举属性,而不仅仅是数组元素。您可能正在运行一些代码,这些代码添加了一个新方法,用于处理您的
for/in
迭代所拾取的数组对象

使用传统的
循环或使用
.forEach()

这些方法将只枚举实际的数组元素,而不枚举可能已添加到数组对象的其他属性


另外,如果将方法设置为不可枚举,则可以向数组中添加不会出现此问题的方法,但您仍然不应该使用
for/in
对数组进行迭代。另外,ES6有一个新的
for/of
语法,可以安全地用于迭代数组,但它需要一个ES6环境。

好的,如果它是一个对象,而不是一个数组(您的代码将其命名为
testArray
,这确实令人困惑),那么您可以这样做以消除添加到原型中的可枚举属性:

for (var key in testArray) {
    if (testArray.hasOwnProperty(key)) {
        console.log(testArray[key]);
    }
}

以前的答案是当我们都认为testArray是一个数组时

这正是您永远不应该使用以下命令迭代数组的原因:

for (var key in testArray)
因为它会迭代数组对象的所有可枚举属性,而不仅仅是数组元素。您可能正在运行一些代码,这些代码添加了一个新方法,用于处理您的
for/in
迭代所拾取的数组对象

使用传统的
循环或使用
.forEach()

这些方法将只枚举实际的数组元素,而不枚举可能已添加到数组对象的其他属性


另外,如果将方法设置为不可枚举,则可以向数组中添加不会出现此问题的方法,但您仍然不应该使用
for/in
对数组进行迭代。另外,ES6有一个新的
for/of
语法,可以安全地用于迭代数组,但它需要一个ES6环境。

您可能有另一个库向数组添加了remove方法。prototype您可能有另一个库向数组添加了remove方法。prototype我怀疑发生了类似您提到的事情。然而,由于testArray是一个对象,我不能在其上使用.length。我试过了。你的另一个建议,forEach也不行。我不知道该怎么办。@Arthlete-你没有说它是一个普通对象,你的代码调用它
testArray
,所以我们都假设它是一个数组。如果不是数组,那么这是一个错误的变量名。看看我在回答的开头加了些什么。你是对的。我写代码时很匆忙。这是我的错。谢谢你的帮助!我怀疑发生了你提到的事情。然而,由于testArray是一个对象,我不能在其上使用.length。我试过了。你的另一个建议,forEach也不行。我不知道该怎么办。@Arthlete-你没有说它是一个普通对象,你的代码调用它
testArray
,所以我们都假设它是一个数组。如果不是数组,那么这是一个错误的变量名。看看我在回答的开头加了些什么。你是对的。我写代码时很匆忙。这是我的错。谢谢你的帮助!