搜索数组并将其父元素和子元素保存在新数组中

时间:2017-06-12 03:30:50

标签: javascript arrays search tree

我有一个包含id,skill和parent属性的数组。我想搜索该数组中的元素。如果找到,我将其保存在一个新的数组中。然后我想搜索它的父级,如果父级也有父级,那么也要保存它们。我还想保存搜索元素的子元素,如果有的话,应该在新数组中添加兄弟元素。找到没有父元素的元素将停止搜索其他父元素。



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() {}
&#13;
&#13;
&#13;

我还将其创建为JSFiddle(请查看输出控制台)。

我已设法在新数组中添加父元素,但在添加子元素及其兄弟元素时陷入困境。

提前致谢!

1 个答案:

答案 0 :(得分:0)

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

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