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

标签 javascript arrays ecmascript-6 duplicates javascript-objects

我有以下对象数组。我需要做的只是从所有连接器数组中删除匹配的键值对。

 [  
       {  
          "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 中使用过滤器、映射和可展开运算符的组合,但尚未找到实现此目的的最佳组合。 我想要的输出如下:

 [  
           {  
              "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"
                 }
              ]
           }
        ]

实现这一目标的最佳解决方案是什么?预先感谢您的帮助..

最佳答案

setTimeout(doit, 100);

function doit() {
  data.forEach(obj => {
    obj.connector = obj.connector.filter(({name}, i, arr) =>
      arr.findIndex(o => o.name === name) === i
    )
  });

  console.log(data);
}

var data = [{
    "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"
    }]
  }
];

关于javascript - 从对象数组中删除重复元素 - es6?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46800721/

相关文章:

java - 在 boolean 数组中迭代 true 的快速方法

javascript - 如何使用 lodash 对多个进行分组

javascript - CanvasJS,为图表设置用户输入标题的问题

C++ 使用给定 vector 的大小以内存安全的方式创建二维数组

javascript - 如何访问angularjs中$http.get方法的.success内的url

javascript - 使用对象数组展平对象中的数据

python - Python/ES6 生成器也是协程吗?

javascript - Vue 组件数据不更新

javascript - MooTools:表单上的 "this"元素

javascript - 将任何对象的类名称中的下划线替换为破折号