对象数组-选择数组子集,其中对象属性为值数组

Array of Objects - Select Subset of Array Where Obj.Prop IN Array of Values

本文关键字:数组 对象 属性 选择 子集      更新时间:2023-09-26

我有一个对象数组。举个例子,假设这些对象有一个id和一个名称:

var myObjectArray = [{id:1, name:'objOne'}, {id:2, name:'objTwo'}];

我想选择这个数组的一个子集,只包含对象id在可接受id数组中的对象。就像这样:

var subsetArray = _.where(myObjectArray , {id:1});

除了obj.id=1条件之外,我想说对象id是IN [3,4,5]

有干净的方法吗?(任何类似lodash、下划线或原始javascript的工作)。还是我忘记了下划线/lodash/etc,只遍历每个元素?

您可以在带有filterindexOf的普通JS中执行此操作。

var results = myObjectArray.filter(o => ~[3,4,5].indexOf(o.id));

filter接受一个回调,该回调将对数组中的每个项进行调用。如果回调返回true,则包含该项,否则不包含。

indexOf接受一个值,如果该值存在于数组中,则在数组中查找该值的从零开始的索引;否则,则为-1

~是一个按位运算符,它将-1转换为0(以及它所做的其他事情),使-1成为在我们的筛选器回调中使用的错误值。

在上面的例子中,filter接受了一个箭头函数形式的回调。=>的左边是o,它是每次迭代时数组中的值。=>右边是一个表达式。箭头允许隐式返回表达式值。Parens对于单值箭头函数也是可选的。

一个更详细的等价物是:

var results = myObjectArray.filter(function(o){
  return [3,4,5].indexOf(o.id) !== -1;
});