Javascript 从对象数组中删除重复元素-es6?
我有以下对象数组。我需要做的就是从所有连接器阵列中删除匹配的key-val对Javascript 从对象数组中删除重复元素-es6?,javascript,arrays,ecmascript-6,duplicates,javascript-objects,Javascript,Arrays,Ecmascript 6,Duplicates,Javascript Objects,我有以下对象数组。我需要做的就是从所有连接器阵列中删除匹配的key-val对 [ { "connector":[ { "name":"CC1" }, { "name":"App1" }, { "name":"CC1
[
{
"connector":[
{
"name":"CC1"
},
{
"name":"App1"
},
{
"name":"CC1"
},
{
"name":"App2"
},
{
"name":"CC1"
},
{
"name":"App3"
}
],
"connections":[
{
"source":"CC1",
"target":"App1"
},
{
"source":"CC1",
"target":"App2"
},
{
"source":"CC1",
"target":"App3"
}
]
},
{
"connector":[
{
"name":"CC1"
},
{
"name":"App1"
},
{
"name":"CC1"
},
{
"name":"App2"
},
{
"name":"CC1"
},
{
"name":"App3"
}
],
"connections":[
{
"source":"CC1",
"target":"App1"
},
{
"source":"CC1",
"target":"App2"
},
{
"source":"CC1",
"target":"App3"
}
]
},
{
"connector":[
{
"name":"CC1"
},
{
"name":"App1"
},
{
"name":"CC1"
},
{
"name":"App2"
},
{
"name":"CC1"
},
{
"name":"App3"
}
],
"connections":[
{
"source":"CC1",
"target":"App1"
},
{
"source":"CC1",
"target":"App2"
},
{
"source":"CC1",
"target":"App3"
}
]
},
{
"connector":[
{
"name":"CC2"
},
{
"name":"App2"
}
],
"connections":[
{
"source":"CC2",
"target":"App2"
}
]
}
]
我曾尝试在es6中使用filter、map和spreadable操作符的组合,但尚未找到实现这一点的最佳组合。
我想要的输出如下:
[
{
"connector":[
{
"name":"CC1"
},
{
"name":"App1"
},
{
"name":"App2"
},
{
"name":"App3"
}
],
"connections":[
{
"source":"CC1",
"target":"App1"
},
{
"source":"CC1",
"target":"App2"
},
{
"source":"CC1",
"target":"App3"
}
]
},
{
"connector":[
{
"name":"CC1"
},
{
"name":"App1"
},
{
"name":"App2"
},
{
"name":"App3"
}
],
"connections":[
{
"source":"CC1",
"target":"App1"
},
{
"source":"CC1",
"target":"App2"
},
{
"source":"CC1",
"target":"App3"
}
]
},
{
"connector":[
{
"name":"CC1"
},
{
"name":"App1"
},
{
"name":"App2"
},
{
"name":"App3"
}
],
"connections":[
{
"source":"CC1",
"target":"App1"
},
{
"source":"CC1",
"target":"App2"
},
{
"source":"CC1",
"target":"App3"
}
]
},
{
"connector":[
{
"name":"CC2"
},
{
"name":"App2"
}
],
"connections":[
{
"source":"CC2",
"target":"App2"
}
]
}
]
实现这一目标的最佳解决方案是什么?提前感谢您的帮助。
setTimeoutdoit,100;
函数doit{
data.forEachobj=>{
obj.connector=obj.connector.filter{name},i,arr=>
arr.findIndexo=>o.name==name==i
};
控制台日志数据;
}
风险值数据=[{
连接器:[{
姓名:CC1
},
{
名称:App1
},
{
姓名:CC1
},
{
姓名:App2
},
{
姓名:CC1
},
{
姓名:App3
}
],
连接:[{
资料来源:CC1,
目标:附件1
},
{
资料来源:CC1,
目标:附件2
},
{
资料来源:CC1,
目标:附件3
}
]
},
{
连接器:[{
姓名:CC1
},
{
名称:App1
},
{
姓名:CC1
},
{
姓名:App2
},
{
姓名:CC1
},
{
姓名:App3
}
],
连接:[{
资料来源:CC1,
目标:附件1
},
{
资料来源:CC1,
目标:附件2
},
{
资料来源:CC1,
目标:附件3
}
]
},
{
连接器:[{
姓名:CC1
},
{
名称:App1
},
{
姓名:CC1
},
{
姓名:App2
},
{
姓名:CC1
},
{
姓名:App3
}
],
连接:[{
资料来源:CC1,
目标:附件1
},
{
资料来源:CC1,
目标:附件2
},
{
资料来源:CC1,
目标:附件3
}
]
},
{
连接器:[{
姓名:CC2
},
{
姓名:App2
}
],
连接:[{
资料来源:CC2,
目标:附件2
}]
}
]; 如果您只需要映射、筛选、查找等常见操作,则不需要lodash: {{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{}}}}}}}}}}{{{{{{{{{{{{{{{{名称:}}}}}}}}}}}}},{{{{{{{{{{{{{{{{{{{{{{{{{名称:名:CC1}}}}}}}}}}}}}}}}}}}}}}}}}{{{{{{{{{{{{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}目标:CC1,目标:App2},{source:CC1,target:App3}},{connector:[{name:CC1},{name:App1},{name:CC1},{name:App2},{name:CC1},{name:CC1},{name:App3}],connections:[{source:CC1,target:App1},{source:CC1,target:App2},{source source:CC1,target:App3},{connector:[{name:CC2},{name:App2},connections:{source; const result=data.mape=>{…e,连接器: e、 连接器 //过滤原始连接器阵列 //并仅返回名称为的元素 //与连接源或目标相同 .filterc=>e.connections.findcn=>[cn.source,cn.target].indexOfc.name!=-1 //按名称删除重复项,如@llama notes .filterv,i,ari=>ari.findIndexc=>c.name==v.name==i };
console.logresult这将过滤掉任何重复的对象,连接器和连接对象可以有任意数量的键
mapper = (input) =>
input.map(x => JSON.stringify(x)) // Stringify
.filter((x, i, a) => a.indexOf(x) === i) // Filter out repeating elements
.map(x => JSON.parse(x)) // Parse stringified object
output = input.map(item =>
({
connector: mapper(item.connector),
connections: mapper(item.connections)
})
)
如果您打算使用lodash,请以防万一。这就是您可以做到的方法。u.mapdata,i=>{i.connector=u.uniqByi.connector,'name';返回i;}最好、最理想的方法是在冗余数据进入此对象数组之前停止冗余数据。您手动从输入数据中删除了重复数据。如果将它们放回,您将看到您的.filter不会删除它们。我想您的意思是,我的代码不会更改原始数据变量,对吗?即int结束。不,我是说您的示例更改了问题中发布的原始数据,以便要删除的重复项不再存在。将它们放回,您将看到您的解决方案不会删除它们。这是因为您的.find回调将为所有重复项返回true…看起来您复制了所需的输出数据我的意思是:所有重复的对象都不会被删除。