我目前正在开发API,我需要在其中创建一个函数来提取“完全”唯一的对象,即任何对象中的属性都不匹配。
我有一个固定模式的对象数组,例如:
let arr = [
{
"a": "a1",
"b": "b1",
"c": "c1",
"d": "d1",
"e": "e1"
},
{
"a": "a2",
"b": "b2",
"c": "c2",
"d": "d2",
"e": "e2"
},
{
"a": "a3",
"b": "b3",
"c": "c2", // matching attribute
"d": "d3",
"e": "e3"
},
// … more objects here, maximum 200 * 33 objects
]
我希望结果为:
[
{
"a": "a1",
"b": "b1",
"c": "c1",
"d": "d1",
"e": "e1"
},
{
"a": "a2",
"b": "b2",
"c": "c2",
"d": "d2",
"e": "e2"
},
// …
]
如果属性匹配,则保留在数组中最先遇到的对象,并丢弃另一个对象。不同的属性永远不会有重叠的值。
我当前的实现:
for (let i in arr[0]) {
let map = new Map();
arr = arr.filter(obj => map.get(obj[i]) ? false : map.set(obj[i], true));
}
console.log(arr);
有没有更好(更有效)的方法来做到这一点?
我将对到目前为止找到的所有值进行设置。检查新对象时,请检查集合中是否包含其任何值:如果是,则排除它,否则将所有值添加到集合中: