问题描述
我试图比较两个数组和其中的多个对象,并根据条件删除元素。我首先在 chrome 的控制台中尝试,并惊讶地发现由于某种原因,即使我使用的 if 条件显然始终为真, arr1 也没有变空。在第一次迭代之后,我总是看到至少一个对象被遗漏了,并且在多次运行循环后,它被删除了。我错过了什么吗?这似乎是一个基本的 JavaScript 错误。
var car1 = {
type: 'das',model: '1',color: 'blue'
} //sample object
arr1 = []
for (i = 0; i < 5; i++) {
arr1[i] = car1
} //filling object with values
for (i in arr1) {
if (arr1[i].type == 'das') { //removing element with condition which always matches
arr1.splice(i,1);
}
}
console.log(arr1);
解决方法
您不得在其循环中更改数组值。
var car1 = {
type: 'das',model: '1',color: 'blue'
} //sample object
arr1 = []
for (i = 0; i < 5; i++) {
arr1[i] = car1
} //filling object with values
arr2 = [];
for (i in arr1) {
if (arr1[i].type != 'das') { //removing element with condition which always matches
arr2.push(arr1[i]);
}
}
arr1 = arr2
console.log(arr1);