Lodash,查找所有匹配元素的索引

时间:2017-05-18 09:59:46

标签: typescript lodash

使用lodash,如何获取所有匹配元素的索引数组? 例如:

Animals = [{Name: 'Dog', Id: 0},
          {Name: 'Cat', Id: 1},
          {Name: 'Mouse', Id: 2},
          {Name: 'Horse', Id: 3},
          {Name: 'Pig', Id: 3}]

然后我想找到Id == 3所有元素的索引。

预期产出:

Indexes = [3,4];

4 个答案:

答案 0 :(得分:5)

这是一个简短的解决方案:

Indexes = _.keys(_.pickBy(Animals, {Id: 3}))

输出:

Indexes = ["3", "4"]

使用pickBy选择元素,并使用keys获取索引。

pickBy用于对象

  

_.pickBy(object, [predicate=_.identity])

     
    

创建一个由对象属性谓词组成的对象,该对象的谓词返回true。谓词由两个参数调用:(值,键)。

  
     

https://lodash.com/docs/4.17.10#pickBy

但是在数组上使用时,它会返回一个类似

的对象
{
  3: {Name: "Horse", Id: 3},
  4: {Name: "Pig", Id: 3}
}

在该对象上使用_.keys以获取字符串数组中的所有键

["3", "4"]

如果要获取数字数组,请使用_.map

_.map(_.keys(_.pickBy(Animals, {Id:3})), Number)

您将获得

[3, 4]

答案 1 :(得分:1)

我认为最直接的方法是将其分解:1)我们需要找出ID为3的对象,2)除去其他所有东西,3)抓住我们感兴趣的索引英寸

_.chain(animals)
    .map((animal, i)=> [i, animal.id === 3])
    .filter(pair=> pair[1])
    .map(pair=> pair[0])
    .value();

答案 2 :(得分:1)

_.filter(
  _.map(Animals, (animal, index) => animal.id === 3 ? index : -1), 
  (index) => index >= 0
)

edit:animal.id === 3是上述问题中定义的过滤条件。

答案 3 :(得分:1)

另一种解决方案:

/var/lib/svn/newname

id === 3是上述问题中定义的过滤条件。