Как я могу получить номер итерации при использовании карты lodash на объекте? - PullRequest
0 голосов
/ 18 апреля 2019
const things = {
  thing1: 'Thing 1',
  thing2: 'Thing 2',
  thing3: 'Thing 3',
};

const newThings = _.map(things, (thing, thingKey) => {
  console.log(thingKey, thing);
}
// Outputs:
// thing1 Thing 1
// thing2 Thing 2
// thing3 Thing 3

Мне нужно знать номер итерации в каждом цикле.Я мог бы вручную создать переменную и затем увеличивать ее на каждой итерации цикла, но я надеялся на некоторую встроенную функциональность метода lodash map.Любые советы?

let iterationNumber = 0;
const newThings = _.map(things, (thing, thingKey, collection) => {
  // Do some stuff
  if (iterationNumber === collection.length - 1) {
    // Do something when it is the last property 
  }
  iterationNumber++;
});

Ответы [ 3 ]

1 голос
/ 19 апреля 2019

С lodash вы можете использовать _.overArgs() для генерации функции, которая преобразует объект в записи с _.toPairs() и вызывает _.map() с записями:

const { overArgs, map, toPairs } = _;

const mapObjectWIthIndex = overArgs(map, [toPairs]);

const things = {
  thing1: 'Thing 1',
  thing2: 'Thing 2',
  thing3: 'Thing 3',
};

const newThings = mapObjectWIthIndex(things, ([v, k], index, collection) => {
  if (index === collection.length - 1) return `${v} - last`;
  
  return `${v} - ${index}`;
});

console.log(newThings);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>
1 голос
/ 18 апреля 2019

Вы можете использовать Object.entries(), чтобы получить ключ / значение от Object и затем карту

   map (currentValue, index, array)

const things = {
  thing1: 'Thing 1',
  thing2: 'Thing 2',
  thing3: 'Thing 3',
};


Object.entries(things).map(([key,value],index)=>{
  console.log(key,value,index)
})
0 голосов
/ 18 апреля 2019

Мне все еще любопытно, есть ли способ получить индекс из метода lodash, но это решение, которое я придумала, работает довольно хорошо:

const newThings = Object.entries(things).map(([thingKey, thing], index) => {
  // Do some stuff
  if (index === collection.length - 1) {
    // Do something when it is the last property 
  }
});
...