javascript - 从数组中删除所有特定对象

标签 javascript

给定数组:

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/

相关文章:

javascript - 如何将展平多维数组(任意深度)的索引转换为原始索引?

javascript - 创建 map 后向 Google map v3 添加标记

javascript - 如何将全局配置的 CDN url 传递给 AngularJS 中的模板?

javascript - 如果已有 Node.appendChild(),ParentNode.append() 有什么用?

javascript - Node 和 Socket.io ...阻止外部客户端连接?

javascript - 使用 Gson 将属性添加到 Json 数组

javascript - 如何检查 DOM 中是否存在元素

javascript - 什么是好的 StrongLoop/GitHub 持续集成管道?

javascript - 如何执行相当于 JSTL 的 c :url in JavaScript?

javascript - JS ES6 : How to give child methods access to their sibblings?