使用 this 关键字来回转换循环结构
converting a circular structure back and forth with the this keyword
我最近看了很多关于圆形结构的书,但我仍然想知道:
我如何 stringify
像这样的对象:
var obj = {
thas: obj,
obj2: {
thos: obj.obj2
}
};
var jsonstring = JSON.stringify(obj);
alert(jsonstring);
来回,这样我什至可以从一开始就拥有字符串化版本并完全相同地解析它。
我不知道您是否有机会更改为对象层次结构,我会针对您的问题提出不同的解决方案:
var str = "[{\"id\": 1, \"nextId\": 2}," +
"{\"id\": 2, \"nextId\": 3}," +
"{\"id\": 3, \"nextId\": 1}]",
objects = JSON.parse(str),
cache = {};
objects.forEach(function (o, i, arr) {
cache[o.id] = o;
});
for (var key in cache) {
var current = cache[key];
var next = cache[cache[key].nextId];
current.next = next;
next.previous = current;
}
var item = objects[0], iterations = 10;
while (iterations) {
console.log(item.id);
item = item.next;
iterations--;
}
您通过 nextId
为下一项提供 id
和 link。解析结构可能不需要其他信息。在运行时(浏览器或 Nodejs),您创建所需的对象结构。
希望这个例子对您有所帮助。
我最近看了很多关于圆形结构的书,但我仍然想知道:
我如何 stringify
像这样的对象:
var obj = {
thas: obj,
obj2: {
thos: obj.obj2
}
};
var jsonstring = JSON.stringify(obj);
alert(jsonstring);
来回,这样我什至可以从一开始就拥有字符串化版本并完全相同地解析它。
我不知道您是否有机会更改为对象层次结构,我会针对您的问题提出不同的解决方案:
var str = "[{\"id\": 1, \"nextId\": 2}," +
"{\"id\": 2, \"nextId\": 3}," +
"{\"id\": 3, \"nextId\": 1}]",
objects = JSON.parse(str),
cache = {};
objects.forEach(function (o, i, arr) {
cache[o.id] = o;
});
for (var key in cache) {
var current = cache[key];
var next = cache[cache[key].nextId];
current.next = next;
next.previous = current;
}
var item = objects[0], iterations = 10;
while (iterations) {
console.log(item.id);
item = item.next;
iterations--;
}
您通过 nextId
为下一项提供 id
和 link。解析结构可能不需要其他信息。在运行时(浏览器或 Nodejs),您创建所需的对象结构。
希望这个例子对您有所帮助。