在我的应用程序中,我有一个项目列表,在检查时将被推入数组,并在取消选中时将从数组中删除。 这是代码
if (data.selectedInsertion === true) {
order.push(data);
}
else if (data.selectedInsertion === false) {
angular.forEach(order, function (value,key) {
if (value == data) {
delete order[key];
}
})
}
问题是当数组中的第5个元素被删除时,数组将永远缺少该键,因此当我使用angularjs
在模板中显示它时,它将在该位置显示空白行或缺少第5个元素。如何在删除元素后重新排列数组。
答案 0 :(得分:0)
if (data.selectedInsertion === true) {
order.push(data);
}
else if (data.selectedInsertion === false) {
order.splice(order.index(data),1);
}
答案 1 :(得分:0)
假设数组中的所有值都是唯一的,您可以这样做:
if(data.selectedInsertion) {
order.push(data);
} else {
order.splice(order.indexOf(data),1)
}
Array.splice从数组中删除元素。 查看此链接以获取更多信息: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice
如果data
不唯一,则只删除数组中的第一个出现。
此外,您可以省略对true
和false
的显式检查,特别是因为它似乎是一个布尔值。
答案 2 :(得分:0)
请记住,永远不要使用delete来删除数组中的元素。因为它将删除元素,在它的键下留下未定义的元素。因此,您可以将其拼接或过滤掉。
将其过滤掉:
if (data.selectedInsertion === true) {
order.push(data);
}
else if (data.selectedInsertion === false) {
order = order.filter(function(v){
return v !== data;
});
}
拼接
if (data.selectedInsertion === true) {
order.push(data);
}
else if (data.selectedInsertion === false) {
order.splice(order.indexOf(data),1);
}
delete用于从对象中删除属性。