对象数组 - 选择数组的子集,其中 Obj.Prop IN 值数组

VSO*_*VSO 2 javascript

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

var myObjectArray = [{id:1, name:'objOne'}, {id:2, name:'objTwo'}];
Run Code Online (Sandbox Code Playgroud)

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

var subsetArray = _.where(myObjectArray , {id:1});
Run Code Online (Sandbox Code Playgroud)

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

有没有干净的方法来做到这一点?(任何像 lodash、下划线或原始 javascript 工作)。或者我忘记了下划线/lodash/etc 只是遍历每个元素?

Jos*_*eph 6

您可以在 vanilla JS 中使用filter和来做到这一点indexOf

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

filter接受一个回调,它被数组中的每个项目调用。如果回调返回 true,则它包含该项目,否则不包含该项目。

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

~是位运算符,轮流-10(中它做其他的事情),使得-1在我们的过滤器回调使用falsy值。

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

更详细的等价物是:

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