首页 > 解决方案 > 删除包含重复属性的嵌套对象

问题描述

我这里有一个嵌套对象

{ people: {
    bob: {
      city: 'florida',
      phone: '561-482-2234'
    },
    jen: {
      city: 'florida',
      phone: '407-382-3883'
    },
    kim: {
      city: 'new york',
      phone: '607-321-3003'
    }
}}

我需要过滤这个对象,以便不存在重复的城市 - 最终结果将是一个包含 bob & kim 的对象。我不关心订单或两个佛罗里达人中的哪一个留在对象中,所以它也可以是 jen & kim

我当前的实现包含一个 for 循环,该循环遍历人员、存储临时键并在名称与临时键匹配时删除嵌套对象。我觉得这是一个漫长而漫长的解决方案

有没有 ES6 方法可以做到这一点?

标签: javascript

解决方案


您可以使用 a 过滤键Set并删除此键。

var a = { people: { bob: { city: 'florida', phone: '561-482-2234' }, jen: { city: 'florida', phone: '407-382-3883' }, kim: { city: 'new york', phone: '607-321-3003' } } };

Object
    .keys(a.people)
    .filter((s => k => s.has(a.people[k].city) || !s.add(a.people[k].city))(new Set))
    .forEach(k => { delete a.people[k]; });

console.log(a);
.as-console-wrapper { max-height: 100% !important; top: 0; }


推荐阅读