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

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

我想选择此数组的一个子集,只包含对象ID在可接受ID数组中的对象。像这样:
var subsetArray = _.where(myObjectArray , {id:1});

除了代替obj.id=1条件外,我想说对象id是[3,4,5]
有一种干净的方法可以做到这一点吗? (例如lodash,下划线或原始javascript工作)。还是忘记下划线/ lodash / etc和adn遍历每个元素?

最佳答案

您可以使用 filter indexOf 在 Vanilla 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;
});

关于javascript - 对象数组-选择Obj.Prop IN值数组的数组子集,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34753266/

10-11 22:30
查看更多