JSON.stringify() - 如何知道replacer中的当前深度

时间:2016-07-29 19:31:49

标签: javascript json parsing

尝试对对象进行字符串化时会出现递归问题。

我想知道是否有人知道在通过密钥重复时当前深度是多少 - >替换者的价值? 我希望用它的ID替换引用,但只有当我处于特定的深度时。

这是一个给出例子的极简主义对象:

var a = {
  id: 'idOfA',
  linkedItems: []
};

var b = {
  id: 'idOfB',
  linkedItems: []
};

var c = {
  id: 'idOfC',
  linkedItems: []
};

a.linkedItems.push({
  from: 0,
  to: 0,
  item: b
});
b.linkedItems.push({
  from: 0,
  to: 0,
  item: a
}, {
  from: 0,
  to: 0,
  item: c
});
c.linkedItems.push({
  from: 0,
  to: 0,
  item: a
}, {
  from: 0,
  to: 0,
  item: b
});

var obj = {
  things: {},
  otherThings: {},
  items: [a, b, c]
};

从obj,我需要用它们的id替换“linkedItems”属性中的每个引用。 我更难以更简单的方法是先将它串起来...... :)

3 个答案:

答案 0 :(得分:0)

我将假设你所谓的“引用”(ab& c)是字符串。

var a="SA", b="SB", c="SC" ;

var obj = {
  things: {},
  otherThings: {},
  items: {
    a: {
      _id: 'idOfA',
      linkedItems: [b, c]
    },
    b: {
      _id: 'idOfB',
      linkedItems: [a]
    },
    c: {
      _id: 'idOfC',
      linkedItems: [a, b]
    }
  }
}
function getID(attr){
   var mapping={'SA':'a','SB':'b','SC':'c'};
   return obj.items[mapping[attr]]._id;
   

};

Object.keys(obj.items).map((value, index) =>{
  obj.items[value].linkedItems = obj.items[value].linkedItems.map((e)=>getID(e));
});

console.log(obj)

答案 1 :(得分:0)

我终于找到了办法。但我不确定这是最佳方式:s。

这是我添加的内容:

Current

答案 2 :(得分:-1)

您可以将toJson函数实现到您的对象中,并在其中处理此案例,然后当您调用JSON.stringify时,它将从该对象返回。

Difference between toJSON() and JSON.Stringify()