我有以下代码:
var a = [{a: 1}, {a: 2}, {a: 3}];
a.map(function (item, index) {
console.log('call');
if (index < 1) {
a.splice(index, 1);
}
});
但是call只打印了两次,我期望打印三次。我知道 splice
弄乱了数组,但是对于这种行为有一些解决方法吗?
谢谢!
最佳答案
如果您想在迭代数组时修改它,那么很多时候,最好使用普通的旧 for
循环,因为您可以控制迭代并更正您的修改。
如果您的修改只是删除当前元素,那么向后的 for
循环是最简单的,因为您在删除当前元素时不必做任何更正。这是一个例子:
var x = [{a: 1}, {a: 2}, {a: 3}];
for (var i = x.length - 1; i >= 0; i--) {
if (x[i].a === 2) {
// remove current element
x.splice(i, 1);
}
}
如果您不介意创建一个新数组作为迭代的结果,您可以使用其他方法,例如 .filter()
。
关于javascript - 在 map 函数中调用 splice,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23399386/