私は、すべてparentIDを持つ配列の中にいくつかのオブジェクトを持っています。 1つの項目を指定すると、配列をループしてオブジェクトの系列を構築する必要があります。 これを行う関数を知っている人はいますか?私は車輪を再発明して何を検索するのか分からないようにしています。オブジェクトを親と親の親を見つけるためにjsonの配列をループする
おかげ
私は、すべてparentIDを持つ配列の中にいくつかのオブジェクトを持っています。 1つの項目を指定すると、配列をループしてオブジェクトの系列を構築する必要があります。 これを行う関数を知っている人はいますか?私は車輪を再発明して何を検索するのか分からないようにしています。オブジェクトを親と親の親を見つけるためにjsonの配列をループする
おかげ
はい、このコードを使用します(私はあなたのための私のノートからコピーして貼り付けました)
Object.sizeは次のように定義されてsuccess: function(msg){ //success response from an AJAX request
var obj=JSON.parse(msg);
for(var i=0;i<Object.size(obj);i++){
var job=obj[i];
var startDate=job['startDate'];
var id=job['id'];
var area=job['area'];
var nDays=job['nDays'];
//etc.
}
:
Object.size=function(obj){
var size=0,key;
for (key in obj){
if(obj.hasOwnProperty(key)) size++;
}
return size;
};
これは、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);
}
}
}
これでテストできます:
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"
"系統"?あれは何でしょう? – Tomalak
配列の例を挙げることはできますか? – Seth