Lodash получает индекс элементов из массива объектов, логическое свойство которых равно true - PullRequest
0 голосов
/ 24 сентября 2018

Я новичок в lodash, я перешел с c # и иногда использовал LINQ, я узнал, что lodash можно использовать для выполнения запросов в стиле linq, но, несмотря на мои попытки, не могу получить индекс элементов из массиваобъектов, которые имеют логическое свойство, равное true в lodash.Кто-нибудь может мне помочь?

Моя первая попытка:

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

Но у меня есть массив, и я делаю:

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

вторая строка не компилирует ни.

Спасибо

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Если вам нужен один индекс, удовлетворяющий этому условию, вы можете использовать findIndex из es6 или lodash

data.findIndex(a=>a.booleanProperty)

Если вам нужны все индексы, удовлетворяющие вашему условию, вы можете либо map и filter соединены последовательно (как показано в ответе бена ), или вы можете объединить их в один reduce, чтобы выполнить итерацию только один раз и построить свой индексный массив.здесь мы идем:

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

let data = [{"booleanProperty":false},{"booleanProperty":true},{"booleanProperty":false},{"booleanProperty":true},{"booleanProperty":false}];
    
let indexes = data.reduce((r, a, i)=> (a.booleanProperty && r.push(i), r), []);
  
  
console.log(indexes);
0 голосов
/ 24 сентября 2018

Вы можете достичь той же цели с чистым JS.Вам не нужен Лодаш

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)
...