Javascript 类型错误 : Cannot read property 'indexOf' of undefined

标签 javascript jquery

在这段代码中,我想从 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/

相关文章:

javascript - 这个语句中的+有什么作用: a = +array[i]

javascript - 为什么全局变量被认为是不好的做法?

javascript - 在 macOS 上写入 Node.js 中的 ~/Documents 文件夹?

asp.net - 如何使用 jquery 将自定义 header 添加到 ASMX Web 服务调用?

javascript - Jumi 插件似乎没有加载 jQuery 和在 joomla 1.5 中用 css 调用的图像

jquery - 使用 jQuery UI 拖动旋转且绝对定位的 div

javascript - 我该如何重构这个 RXJS/Angular 代码?

javascript - mongodb更新不会立即更新

jQuery 查找功能未按预期工作

javascript - 尝试使用 jquery 表单提交,但不起作用