在此代码中,我想从cart_products
array.
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 控制台中收到此错误:
未捕获的类型错误:无法读取未定义的属性“indexOf”
代码有问题吗?
感谢您的帮助。
问题是你是修改数组,而 jQuery 的$.each
正在对其进行循环,因此当它到达末尾时,索引 2 处的条目已不复存在。(我承认我有点惊讶$.each
就是这样,但我没用过$.each
至少五年后,所以......)
如果目标是从数组中删除匹配项,则更好的选择是filter https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/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
loop 正如安德烈亚斯指出的 https://stackoverflow.com/questions/41895890/javascript-typeerror-cannot-read-property-indexof-of-undefined/41896024?noredirect=1#comment70974402_41896024循环backward通过数组,所以当你删除东西时并不重要:
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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)