Javascript 从对象数组中删除重复元素-es6?

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

我有以下对象数组。我需要做的就是从所有连接器阵列中删除匹配的key-val对

 [  
       {  
          "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…看起来您复制了所需的输出数据我的意思是:所有重复的对象都不会被删除。