我需要基于另一个数组中可变数量的项目来过滤一个数组。
说我要过滤的数组看起来像这样:

var toBeFiltered = [
  {name:"A", parentId: 0},
  {name: "B", parentId: 3},
  {name: "C", parentId: 0},
  {name: "D", parentId: 1},
  ...
]


我需要过滤parentId在另一个数组中的所有元素(例如:var filtering = [3,1,0],但是可以有任何长度)。
如何基于filtering数组的内容动态构建过滤器表达式?在这种情况下,我将得到以下表达式:

function(d){return d.parentId == 3 || d.parentId == 1 || d.parentId == 0;}


有什么聪明的方法可以做到这一点吗?类似于布尔表达式的串联吗?

最佳答案

您可以使用indexOf方法检查给定item中是否存在array

indexOf方法返回指定值的首次出现,如果未找到-1,则返回value



var toBeFiltered = [
  {name:"A", parentId: 0},
  {name: "B", parentId: 3},
  {name: "C", parentId: 0},
  {name: "D", parentId: 1},
  {name: "E", parentId: 4}
]
var filtering = [3,1,0];
toBeFiltered=toBeFiltered.filter(a=>filtering.indexOf(a.parentId)!==-1);
console.log(toBeFiltered);





您也可以使用Set中的ES6功能。



var toBeFiltered = [
  {name:"A", parentId: 0},
  {name: "B", parentId: 3},
  {name: "C", parentId: 0},
  {name: "D", parentId: 1},
  {name: "E", parentId: 4}
]
var filtering = new Set([3,1,0]);
toBeFiltered=toBeFiltered.filter(a=>filtering.has(a.parentId));
console.log(toBeFiltered);

08-06 03:51