【问题标题】:Remove circular in object?删除对象中的圆形?
【发布时间】:2019-09-23 05:40:02
【问题描述】:

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

说吧

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

【问题讨论】:

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


【解决方案1】:

您可以使用 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);
};

【讨论】:

    猜你喜欢
    • 2017-07-07
    • 1970-01-01
    • 2012-08-05
    • 1970-01-01
    • 1970-01-01
    • 2013-11-28
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    相关资源
    最近更新 更多