删除对象的嵌套对象中的重复项

Remove duplicates in nested objects of object

尝试从设备解析一些网络描述,遇到描述可能跨类型重复的问题。这会导致代码进一步出错。 lodash 或 javascript 的最佳选择是什么来比较每个嵌套对象并删除重复项,直到它们不存在于数组中。目标是删除字符串 1 - 111 直到它只存在于一个对象中。

const data = {
    "hostname": {
        "typeA": [
            "string 1 - 111",
            "string 2 - 222",
            "string 3 - 333"
        ],
        "typeB": [
            "string 1 - 111",
            "string 4 - 444",
            "string 5 - 555"
        ],
        "typeC": [
            "string 1 - 111",
            "string 6 - 666"
        ]
    }
}

您只需要遍历每个类型数组并根据 Set of previously seen values. Here mutating data in place using filter() 进行过滤以填充 Set 和 return 过滤后的数组。

const data = {
  hostname: {
    typeA: ['string 1 - 111', 'string 2 - 222', 'string 3 - 333'],
    typeB: ['string 1 - 111', 'string 4 - 444', 'string 5 - 555'],
    typeC: ['string 1 - 111', 'string 6 - 666'],
  },
};

const seen = new Set();

for (const key of Object.keys(data.hostname)) {
  data.hostname[key] = data.hostname[key].filter((s) => {
    const _seen = seen.has(s);
    seen.add(s);

    return !_seen;
  });
}

console.log(data);