Javascript 循环json数组以查找父对象,然后查找父对象';父母
我在一个数组中有许多对象,它们都有一个parentID(0表示没有父-顶级)。 给定一个项目,我需要遍历数组并构建对象的沿袭。 有人知道这样做的函数吗?我试着不去重新发明轮子,也不确定要寻找什么 谢谢是的,请使用以下代码:(我已经为您复制并粘贴了我的笔记)Javascript 循环json数组以查找父对象,然后查找父对象';父母,javascript,Javascript,我在一个数组中有许多对象,它们都有一个parentID(0表示没有父-顶级)。 给定一个项目,我需要遍历数组并构建对象的沿袭。 有人知道这样做的函数吗?我试着不去重新发明轮子,也不确定要寻找什么 谢谢是的,请使用以下代码:(我已经为您复制并粘贴了我的笔记) 这将基于id和parentId实现一个简单的泛型树: function Node(obj) { this.data = obj; this.parent = null; this.children = []; } fu
这将基于id和parentId实现一个简单的泛型树:
function Node(obj) {
this.data = obj;
this.parent = null;
this.children = [];
}
function Tree(objArray, idField, parentIdField) {
this.index = {0: new Node()};
// build an index by the value of idField
for (var i=0, j=objArray.length; i<j; i++) {
var currObj = objArray[i];
this.index[ currObj[idField] ] = new Node(currObj);
}
// link the individual objects to a tree
for (var i=0, j=objArray.length; i<j; i++) {
var currObj = objArray[i],
currNode = this.index[ currObj[idField] ],
parentNode = this.index[ currObj[parentIdField] ];
if (parentNode) {
currNode.parent = parentNode;
parentNode.children.push(currNode);
}
}
}
功能节点(obj){
此.data=obj;
this.parent=null;
这是:children=[];
}
函数树(objArray、idField、parentIdField){
this.index={0:new Node()};
//根据idField的值建立索引
对于(var i=0,j=objArray.length;你能给我一个数组的例子吗?有趣的是,只是使用了它,我只需要将找到的项传递给一个外部循环,直到没有返回。我想可能有一个很好的库。做这么简单的事情,你不需要库
Object.size=function(obj){
var size=0,key;
for (key in obj){
if(obj.hasOwnProperty(key)) size++;
}
return size;
};
function Node(obj) {
this.data = obj;
this.parent = null;
this.children = [];
}
function Tree(objArray, idField, parentIdField) {
this.index = {0: new Node()};
// build an index by the value of idField
for (var i=0, j=objArray.length; i<j; i++) {
var currObj = objArray[i];
this.index[ currObj[idField] ] = new Node(currObj);
}
// link the individual objects to a tree
for (var i=0, j=objArray.length; i<j; i++) {
var currObj = objArray[i],
currNode = this.index[ currObj[idField] ],
parentNode = this.index[ currObj[parentIdField] ];
if (parentNode) {
currNode.parent = parentNode;
parentNode.children.push(currNode);
}
}
}
var testArray = [
{id: 1, parent: 0, name: "Test 1"},
{id: 2, parent: 0, name: "Test 2"},
{id: 3, parent: 1, name: "Test 1.1"},
{id: 4, parent: 1, name: "Test 1.2"},
{id: 5, parent: 3, name: "Test 1.1.1"},
{id: 6, parent: 2, name: "Test 2.1"}
];
var tree = new Tree(testArray, "id", "parent");
var root = tree.index[0];
for (var i=0; i<root.children.length; i++) {
console.log(root.children[i].data.name);
}
// "Test 1"
// "Test 2"
console.log(tree.index[5].parent.data.name);
// "Test 1.1"