尝试对对象进行字符串化时会出现递归问题。
我想知道是否有人知道在通过密钥重复时当前深度是多少 - >替换者的价值? 我希望用它的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”属性中的每个引用。 我更难以更简单的方法是先将它串起来...... :)
答案 0 :(得分:0)
我将假设你所谓的“引用”(a
,b
& 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
时,它将从该对象返回。