从javascript数组中删除项会导致错误

时间:2016-04-29 15:44:02

标签: javascript jquery json

我尝试遍历对象中的项目并删除属性为delete的项目,然后将该对象作为数据发布。

当我使用splice删除项目时,我得到一个Uncaught TypeError:无法读取属性' delete'未定义的错误。那是为什么?

https://jsfiddle.net/ah9td94q/3/

var data = {
    "stuff":[
        {"x":0},
        {"y":1, "delete": true},
        {"z":2, "delete": true}
    ]
}

Object.keys(data.stuff).forEach(function (key) {
    if (data.stuff[key].delete == true) {
    data.stuff.splice(key, 1);
  }
});

var postData = JSON.stringify({something:'something', data: data});
console.log(postData);

1 个答案:

答案 0 :(得分:3)

var data = {
    "stuff":[
        {"x":0},
        {"y":1, "delete": true},
        {"z":2, "delete": true}
    ]
}

Object.keys(data.stuff).reverse().forEach(function (key) {
    if (data.stuff[key].delete == true) {
    data.stuff.splice(key, 1);
  }
});

var postData = JSON.stringify({something:'something', data: data});
console.log(postData);

https://jsfiddle.net/ah9td94q/4/

您无法从向前计数的数组中删除,因为删除的元素之后的元素将会移动到"到你刚刚删除的插槽。因此,我们不是从头到尾删除,而是从头到尾删除,并绕过这个索引问题。