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

时间:2016-01-12 20:33:54

标签: javascript

我有一个对象数组。例如,让我们说这些对象有一个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 adn只是遍历每个元素?

1 个答案:

答案 0 :(得分:4)

你可以使用filterindexOf在香草JS中执行此操作。

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

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

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

~是一个按位运算符,可将-1转换为0(在其他功能中),使-1成为我们的过滤回调中使用的假值。

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

更详细的等价物是:

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