给定数组:
myArr = [
{'a':1},
{'b':1},
{'b':2},
{'a':1},
{'b':2}
]
索引 0
具有对象 {'a':1}
,我想取回数组:
[{'b':1},{'b':2},{'b':2}]
保持原始排序顺序。
即删除索引 0
中的对象以及所有其他等效对象。
有没有优雅的方法?
最佳答案
如果你想删除同一个对象,很简单:
a1 = { a: 1 }
b1 = { b: 1 }
b2 = { b: 2 }
myArr = [ a1, b1, b2, a1, b2 ]
var filtered = myArr.filter(o => o != a1)
console.log(filtered);
// [ {b: 1}, {b: 2}, {b: 2} ]
但是,如果您想删除等效对象,事情就会变得复杂,因为默认情况下 JavaScript 没有对象等效测试。您可以自己实现一个,或者依赖像 lodash 这样的库之一:
var myArr = [
{'a':1},
{'b':1},
{'b':2},
{'a':1},
{'b':2}
];
var filtered = _.filter(myArr, o => !_.isEqual(o, {a: 1}));
console.log(filtered);
// [ {b: 1}, {b: 2}, {b: 2} ]
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.16.6/lodash.min.js"></script>
话又说回来,如果您正在使用 lodash,您不妨充分利用它:
var myArr = [
{'a':1},
{'b':1},
{'b':2},
{'a':1},
{'b':2}
];
var filtered = _.differenceWith(myArr, [{a: 1}], _.isEqual);
console.log(filtered);
// [ {b: 1}, {b: 2}, {b: 2} ]
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.16.6/lodash.min.js"></script>
它基本上做同样的事情,但更具可读性。
关于javascript - 从数组中删除所有特定对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40479931/