使用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];
答案 0 :(得分:5)
这是一个简短的解决方案:
Indexes = _.keys(_.pickBy(Animals, {Id: 3}))
输出:
Indexes = ["3", "4"]
使用pickBy
选择元素,并使用keys
获取索引。
pickBy
用于对象
_.pickBy(object, [predicate=_.identity])
创建一个由对象属性谓词组成的对象,该对象的谓词返回true。谓词由两个参数调用:(值,键)。
但是在数组上使用时,它会返回一个类似
的对象{
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是上述问题中定义的过滤条件。