删除对象的嵌套对象中的重复项
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);
尝试从设备解析一些网络描述,遇到描述可能跨类型重复的问题。这会导致代码进一步出错。 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);