当孩子的父母被过滤器排除时,如何在 array.filter() 回调函数中获取孩子的父母?



今天我发现了array.filter()方法及其关联的回调函数。

我有一系列看起来像这样的对象:

var treeAry = [
      {"id" : "200", "parent": "#", "type" : "1"},
      {"id" : "300", "parent": "#", "type" : "1"},
      {"id" : "400", "parent": "#", "type" : "1"},
      {"id" : "500", "parent": "300", "type" : "5"},
      {"id" : "600", "parent": "300", "type" : "5"},
      {"id" : "700", "parent": "400", "type" : "5"},
      {"id" : "800", "parent": "400", "type" : "5"},
      {"id" : "900", "parent": "200", "type" : "6"},
      {"id" : "1000", "parent": "200", "type" : "9"},
      {"id" : "1100", "parent": "200", "type" : "8"},
];

我能够成功过滤5:

  filteredAry = [];
  filteredAry = treeAry.filter(function(val, index, ary){
    /*get all type 5*/
    return val.type === '5';
    /*get all type 5 or type 1*/
    //return val.type === '1' || val.type === '5';
  });
  console.dir(filteredAry)

这是我的问题:

尽管我能够过滤5型,但我也需要5型的父母(孩子的parent参考id,并且parent可以是#)。从本质上讲,我的结果应包括5型的任何内容,然后记录id 300400。它不应包括id 200

我是否应该在filteredAry[]上的每个循环中运行某种形式的循环以在treeAry[]中找到并推动相应的项目?我不应该使用indexary参数以某种方式获得父母吗?

对不起,我不知道该怎么做,并希望您的帮助。只需要朝正确的方向推动,谢谢!

尝试以下:

var treeAry = [
      {"id" : "200", "parent": "#", "type" : "1"},
      {"id" : "300", "parent": "#", "type" : "1"},
      {"id" : "400", "parent": "#", "type" : "1"},
      {"id" : "500", "parent": "300", "type" : "5"},
      {"id" : "600", "parent": "300", "type" : "5"},
      {"id" : "700", "parent": "400", "type" : "5"},
      {"id" : "800", "parent": "400", "type" : "5"},
      {"id" : "900", "parent": "200", "type" : "6"},
      {"id" : "1000", "parent": "200", "type" : "9"},
      {"id" : "1100", "parent": "200", "type" : "8"},
];
var result = treeAry.filter(value => {
	return value.type === '5' || treeAry.filter(val => val.parent === value.id && val.type === '5').length > 0;
});
console.log(result)

如果ES6是问题,则可以用普通功能替换lambdas(箭头功能)。

一种方式是

var treeAry = [
      {"id" : "200", "parent": "#", "type" : "1"},
      {"id" : "300", "parent": "#", "type" : "1"},
      {"id" : "400", "parent": "#", "type" : "1"},
      {"id" : "500", "parent": "300", "type" : "5"},
      {"id" : "600", "parent": "300", "type" : "5"},
      {"id" : "700", "parent": "400", "type" : "5"},
      {"id" : "800", "parent": "400", "type" : "5"},
      {"id" : "900", "parent": "200", "type" : "6"},
      {"id" : "1000", "parent": "200", "type" : "9"},
      {"id" : "1100", "parent": "200", "type" : "8"},
];
  filteredAry = [];
  filteredAry = treeAry.filter(function(val, index, ary){
    /*get all type 5*/
    return val.type === '5' || 
           ary.some(function(item){ 
                return item.parent === val.id && item.type==='5';
              });
  });
  console.dir(filteredAry)

最新更新