删除对象中的圆形?

时间:2019-05-05 09:54:27

标签: javascript node.js json object circular-reference

是否可以删除对象内部的循环类型?

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]
            }
        })
    }
})

1 个答案:

答案 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);
};