是否可以删除对象内部的循环类型?
说
result = {
a : [Array],
b : [Object],
c : [Circular],
d : 'string'
e : {
x : [Circular],
y : {
z : [Circular]
}
}
}
到
result = {
a : [Array],
b : [Object],
d : 'string'
}
我想过滤掉对象中所有的圆形类型。
尝试1:
由于每个对象的名称在子对象中也相同。 我试图删除它,因为大多数儿童圆形对象仅指向父母。 (实际上,我对此部分感到困惑)。这是我尝试使用的代码。
let keys = Object.keys(obj)
keys.forEach(val => {
if (obj[val] instanceof Object || obj[val] instanceof Array) {
Object.values(obj[val]).filter(function (value, index, arr) {
if (keys.indexOf(Object.keys(value)[index]) > 0) {
delete obj[val][index]
}
})
}
})
答案 0 :(得分:0)
您可以使用Set过滤掉两次出现的对象:
const noCirculars = v => {
const set = new Set;
const noCirculars = v => {
if(Array.isArray(noCirculars))
return v.map(noCirculars);
if(typeof v === "object" && v !== null) {
if(set.has(v)) return undefined;
set.add(v);
return Object.fromEntries(Object.entries(v)
.map(([k, v]) => ([k, noCirculars(v)])));
}
return v;
};
return noCirculars(v);
};