Как я могу получить номер итерации при использовании lodash map для объекта?

#javascript #lodash

#javascript #lodash

Вопрос:

 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  ;
});
 

Комментарии:

1. Вам нужно использовать .map или любая другая идея itrating будет работать для вас?

2. Мне нужно использовать map, так как я использую его для React и должен буду вернуть массив JSX

3. используйте номинальную карту …. myArray.map( (index, item) => console.log(item, «at index: «, index)

4. map будет работать только для массива, но я полагаю, что я мог бы использовать Object.entries() для преобразования объекта в массив.

5. Ну, нет индекса, если вы не используете массив?

Ответ №1:

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

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

Комментарии:

1. Вопрос, специально заданный для lodash решений на основе.

Ответ №2:

С помощью 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> 

Ответ №3:

Мне все еще интересно, есть ли способ получить индекс из 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 
  }
});
 

Комментарии:

1. Принятый ответ имеет тот же контент, и, кстати, оба ответа не используют Lodash.