我尝试遍历对象中的项目并删除属性为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);
答案 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/
您无法从向前计数的数组中删除,因为删除的元素之后的元素将会移动到"到你刚刚删除的插槽。因此,我们不是从头到尾删除,而是从头到尾删除,并绕过这个索引问题。