假设我有以下对象数组
var firstDataSet = [
{'id': 123, 'name': 'ABC'},
{'id': 456, 'name': 'DEF'},
{'id': 789, 'name': 'GHI'},
{'id': 101, 'name': 'JKL'}
];
var secondDataSet = [
{'id': 123, 'name': 'ABC', 'xProp': '1q'},
{'id': 156, 'name': 'MNO', 'xProp': '2w'},
{'id': 789, 'name': 'GHI', 'xProp': '3e'},
{'id': 111, 'name': 'PQR', 'xProp': '4r'}
];
现在我想收集具有唯一对象的数组(匹配 id
和 name
)即
var firstDataSet = [
{'id': 123, 'name': 'ABC', 'xProp': '1q'},
{'id': 456, 'name': 'DEF'},
{'id': 789, 'name': 'GHI', 'xProp': '3e'},
{'id': 101, 'name': 'JKL'},
{'id': 156, 'name': 'MNO', 'xProp': '2w'},
{'id': 111, 'name': 'PQR', 'xProp': '4r'}
];
我可以用
Array.prototype.unshift.apply(firstDataSet , secondDataSet );
但不确定如何过滤掉重复项。有什么建议吗?
编辑:我在两个不同数组上的对象不相同。至少基于属性的数量。
原文由 αƞjiβ 发布,翻译遵循 CC BY-SA 4.0 许可协议
删除具有所有相同特性的重复项
_这是最初的问题_。
使用
Set
:您还可以使用对象字面量。
有关将集合构造回数组的更多方法,您可以按照 此处 的说明进行操作。如果您不能使用 ES6(定义
Set
的内容),则可以使用适用于旧版浏览器的 polyfill 。删除具有重复属性子集的对象
不幸的是,这些对象不再是严格重复的,并且不能使用例如
Set
以友好的方式处理。解决此类问题的最简单方法是遍历对象数组,识别具有重复属性值的对象,并使用例如
splice
就地消除。