在这段代码中,我想从 cart_products
数组中删除一个元素。
var cart_products = ["17^1", "19^1", "18^1"];
var product = 17;
$.each(cart_products,function(key, item) {
if(item.indexOf(product+"^") !== -1){
cart_products.splice(key, 1);
}
});
但我在 Google Chrome 控制台中收到此错误:
Uncaught TypeError: Cannot read property 'indexOf' of undefined
代码有问题吗?
感谢您的帮助。
最佳答案
问题是您正在修改数组,而 jQuery 的 $.each
正在遍历它,所以当它到达末尾时,条目曾经在索引 2 处不再存在。 (我承认我对 $.each
的行为感到有点惊讶,但我至少有五年没有使用过 $.each
了,所以。 ..)
如果目标是从数组中删除匹配项,更好的选择是 filter
:
var cart_products = ["17^1", "19^1", "18^1"];
var product = 17;
cart_products = cart_products.filter(function(item) {
return item.indexOf(product+"^") === -1;
});
console.log(cart_products);
...或者如果重要的是就地修改数组而不是创建一个新数组,则使用无聊的 for
循环 as Andreas points out在数组中向后循环,这样当你删除东西时就没关系了:
var cart_products = ["17^1", "19^1", "18^1"];
var product = 17;
var target = product + "^";
for (var index = cart_products.length - 1; index >= 0; --index) {
if (cart_products[index].indexOf(target) !== -1) {
cart_products.splice(index, 1);
}
}
console.log(cart_products);
关于Javascript 类型错误 : Cannot read property 'indexOf' of undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41895890/