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

5 typescript lodash

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

Animals = [{Name: 'Dog', Id: 0},
          {Name: 'Cat', Id: 1},
          {Name: 'Mouse', Id: 2},
          {Name: 'Horse', Id: 3},
          {Name: 'Pig', Id: 3}]
Run Code Online (Sandbox Code Playgroud)

然后我想用查找所有元素的索引Id == 3

预期产量:

Indexes = [3,4];
Run Code Online (Sandbox Code Playgroud)

Ali*_*ang 8

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

Indexes = _.keys(_.pickBy(Animals, {Id: 3}))
Run Code Online (Sandbox Code Playgroud)

输出:

Indexes = ["3", "4"]
Run Code Online (Sandbox Code Playgroud)

使用pickBy挑元素,并keys得到索引。

pickBy 用于对象

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

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

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

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

{
  3: {Name: "Horse", Id: 3},
  4: {Name: "Pig", Id: 3}
}
Run Code Online (Sandbox Code Playgroud)

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

["3", "4"]
Run Code Online (Sandbox Code Playgroud)

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

_.map(_.keys(_.pickBy(Animals, {Id:3})), Number)
Run Code Online (Sandbox Code Playgroud)

你会得到

[3, 4]
Run Code Online (Sandbox Code Playgroud)