gpt4 book ai didi

javascript - 算法查找深度并按顺序插入 JSON 数组

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:46:33 25 4
gpt4 key购买 nike

我需要根据 parentId 从 json 数组中查找关系并以顺序结构插入到数组中。 ParentId 映射到 _Id,它是 parent 。

[{"_Id":1,parentId:"",name:'A'},
{"_Id":4,parentId:2,name:'D'},
{"_Id":2,parentId:1,name:'B'},
{"_Id":5,parentId:3,name:'E'},
{"_Id":3,parentId:1,name:'C'}]

上面的数组需要转换成下面的深度场结构。

[{"_Id":1,parentId:"",name:'A', 'depth':1},   
{"_Id":2,parentId:1,name:'B', 'depth':2},
{"_Id":4,parentId:2,name:'D', 'depth':3},
{"_Id":3,parentId:1,name:'C', 'depth':2},
{"_Id":5,parentId:3,name:'E', 'depth':3}]

1
2
4
3
5

我是一名新手程序员,需要提示。

  var finalArray = [];
var initPath = function (task) {
// TODO
};
for (var i = 0, len = array.length; i < len; i++) {
if (array[i].parentId == "") {
array[i]['depth'] = 1;
finalArray(array[i]);
initPath(array[i]);
}
}

最佳答案

好吧,我不会为您完成所有工作,但这里有一个解决方案,可以在不重新排列元素顺序的情况下增加深度。这是 on JSFiddle ,这里是相关代码:

var addDepth = function(data) {
var depth = 0, nodes = data.filter(function(item) {
return item.parentId == "";
}), total = nodes.length;

do {
depth++;
nodes.forEach(function(node) {node.depth = depth;});
var ids = nodes.map(function(item) {return item["_Id"];});
nodes = data.filter(function(item) {
return ids.indexOf(item.parentId) > -1;
});
total += nodes.length
} while (nodes.length > 0 && total <= data.length);
return data;
};

请注意,这会原地更改数组,不会创建克隆。这可能是也可能不是你想要的。 (因为我最近专注于函数式编程,它至少稍微冒犯了我自己的感觉。)这应该相对容易改变。

请注意,这实际上是我的第二个版本。 <强> first one 在我看来要优雅得多。但它基于 the Ramda library 我还在开发中。虽然我喜欢这个库,并且发现它易于使用,但我并不一定期望这段代码对于那些不经常进行函数式编程的人来说会更明显:

var addDepth = function(data) {
var depth = 0, nodes = filter(pipe(get("parentId"), eq("")), data),
total = nodes.length;
do {
depth++;
nodes.forEach(function(node) {node.depth = depth;});
nodes = filter(pipe(get("parentId"), flip(contains)(pluck("_Id", nodes))), data);
total += nodes.length
} while (nodes.length > 0 && total <= data.length);
return data;
};

关于javascript - 算法查找深度并按顺序插入 JSON 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20521920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com