【发布时间】:2016-06-08 14:18:11
【问题描述】:
我有如下的json数组,需要通过一定的条件去掉一些:
var data = [
{data1: "aaa", data2: "bbb", data3: "ccc"}, // First
{data1: "ddd", data2: "eee", data3: "fff"}, // Second
{data1: "ggg", data2: "hhh", data3: "iii"}, // Third
{data1: "jjj", data2: "eee", data3: "lll"} // Fourth
];
angular.forEach(data, (item, i) => {
if (item.data2 == 'eee' || item.data3 == 'iii') {
data.splice(i, 1);
}
});
console.log(data);
在上述情况下,我需要从数据数组中删除第二个(data2 有“eee”)、第三个(data3 有“iii”)和第四个(data2 是“eee”)对象。 但是第三个对象并没有被拼接,而是保留在数据数组中。
我可以以这种方式使用 OR (||) 运算符吗?如果不是,使用多个条件从数组中删除元素的正确方法是什么?
我已经为这个问题摸索了好几个小时,但也许我错过了一些东西。
【问题讨论】:
-
问题不在于
||运算符:不要在循环内使用splice。 -
不要改变你正在迭代的数组,最好使用
filter。 -
迭代时移除项目的问题是大小变化和索引会有你不想要的行为。解决方法是反向循环:jsfiddle.net/joherro3/pca5Lbgg/1 但最好使用过滤器。
-
我删除了我原来的答案并发布了一个更完整的解决方案。
标签: javascript arrays angularjs