Lodash从布尔属性等于true的对象数组中检索项目的索引

时间:2018-09-24 10:19:47

标签: javascript typescript lodash

我是lodash的初学者,我来自c#,有时我使用LINQ,我了解到lodash可用于查询linq样式,但是尽管我做了尝试,但仍无法从数组中获取项目的索引具有在lodash中等于true的布尔属性的对象。 谁能帮我吗?

我的第一次尝试:

var indexofItemns =_.find( arrayOfItems, (item) => 
  (item.booleanProperty === true));

但是,我有一个数组,我可以做:

var indexItems: number[] = [];
indexItems= _.times(
  arrayOfItems.length,
  _.find( arrayOfItems, (item) => (item.booleanProperty === true)); 

第二行也不编译。

谢谢

2 个答案:

答案 0 :(得分:2)

使用纯JS可以实现相同的目标。 你不需要lodash

const data = [{
    booleanProperty: false
  },
  {
    booleanProperty: true
  },
  {
    booleanProperty: false
  },
  {
    booleanProperty: true
  },
  {
    booleanProperty: false
  }
];

const indexItems = data.map((item, index) => item.booleanProperty === true ? index : null).filter((item) => item !== null);


console.log(indexItems)

答案 1 :(得分:1)

如果您需要一个满足该条件的索引,则可以使用findIndexes6中的lodash

data.findIndex(a=>a.booleanProperty)

如果需要满足条件的所有索引,则可以mapfilter顺序地一起使用(如ben's answer所示),也可以将它们合并为一个{{1 }仅迭代一次并构建索引数组。我们开始:

reduce

data.reduce((r, a, i)=> (a.booleanProperty && r.push(i), r), [])