Javascript 循环json数组以查找父对象,然后查找父对象';父母

Javascript 循环json数组以查找父对象,然后查找父对象';父母,javascript,Javascript,我在一个数组中有许多对象,它们都有一个parentID(0表示没有父-顶级)。 给定一个项目,我需要遍历数组并构建对象的沿袭。 有人知道这样做的函数吗?我试着不去重新发明轮子,也不确定要寻找什么 谢谢是的,请使用以下代码:(我已经为您复制并粘贴了我的笔记) 这将基于id和parentId实现一个简单的泛型树: function Node(obj) { this.data = obj; this.parent = null; this.children = []; } fu

我在一个数组中有许多对象,它们都有一个parentID(0表示没有父-顶级)。 给定一个项目,我需要遍历数组并构建对象的沿袭。 有人知道这样做的函数吗?我试着不去重新发明轮子,也不确定要寻找什么

谢谢

是的,请使用以下代码:(我已经为您复制并粘贴了我的笔记)


这将基于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"