2017-06-12 33 views
0

我有一个ID,技能和父属性的阵列。我想搜索该数组中的一个元素。如果找到了,我将它保存在一个新的阵列中。然后我想搜索它的父代,如果父代也有一个父代,那么也保存它们。我也想保存搜索到的元素的子元素,如果有的话,应该在新数组中添加同级元素。发现没有父项的元素将停止搜索更多的父元素。在阵列中搜索并将其父元素和子元素保存到新阵列中

var search = 'cde'; 
 

 
var data = [{ 
 
    'id': '99', 
 
    'skill': 'pro', 
 
    'parent': null 
 
}, { 
 
    'id': '0', 
 
    'skill': 'abc', 
 
    'parent': '99' 
 
}, { 
 
    'id': '1', 
 
    'skill': 'bcd', 
 
    'parent': null 
 
}, { 
 
    'id': '2', 
 
    'skill': 'cde', 
 
    'parent': '0' 
 
}, { 
 
    'id': '3', 
 
    'skill': 'def', 
 
    'parent': '0' 
 
}, { 
 
    'id': '4', 
 
    'skill': 'efg', 
 
    'parent': '1' 
 
}, { 
 
    'id': '5', 
 
    'skill': 'fgh', 
 
    'parent': '1' 
 
}, { 
 
    'id': '6', 
 
    'skill': 'ghi', 
 
    'parent': '2' 
 
}, { 
 
    'id': '7', 
 
    'skill': 'hij', 
 
    'parent': null 
 
}]; 
 
var arrayP = []; 
 

 
searchKey(search); 
 

 
function searchKey(s) { 
 
    var tmpskill = []; 
 
    for (var i = 0; i < data.length; i++) { 
 
    if (data[i].skill == s) { 
 
     arrayP.push(data[i]); 
 
     findParent(data[i].parent) 
 
    } else {} 
 
    } 
 
} 
 

 
function findParent(pid) { 
 
    for (var i = 0; i < data.length; i++) { 
 
    if (data[i].id == pid) { 
 
     arrayP.push(data[i]); 
 
     if (data[i].parent != null) { 
 
     findParent(data[i].parent); 
 
     } else {} 
 
    } 
 
    } 
 
} 
 
console.log(arrayP); 
 

 
function findChilds() {}

我也创造了这个作为一个JSFiddle(请看控制台输出)。

我已经成功地将新元素添加到新数组中,但在添加子元素及其同级元素时遇到困难。

在此先感谢!

回答

0
function findChilds(id){ 
    return data.filter(v=>v.parent==id;); 
} 

function findSiblings(id){ 
    return data.filter(v=>v.parent==id.parent;); 
} 
+0

尽管此代码可能会回答问题,但提供有关如何解决问题和/或解决问题原因的其他上下文会提高答案的长期价值。 – Badacadabra