1
votes

Comment puis-je obtenir le numéro d'itération lors de l'utilisation de la carte lodash sur un objet?

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

11 commentaires

Avez-vous besoin d'utiliser .map ou toute autre idée itrative fonctionnera pour vous?


J'ai besoin d'utiliser map, car je l'utilise pour React et devra renvoyer un tableau de JSX


utiliser une carte normale .... Array.map ((index, item) => console.log (item, "at index:", index)


map ne fonctionnera que pour un tableau, mais je suppose que je pourrais utiliser Object.entries () pour convertir l'objet en tableau.


Eh bien, il n'y a pas d'index si vous n'utilisez pas de tableau?


C'est pourquoi je l'ai appelé le numéro d'itération et pas nécessairement un index


Que veux-tu dire ? Dans votre propre question, vous voyez qu'il informe l'index d'interaction dans la variable thingKey. Si vous savez déjà comment obtenir le numéro d'interaction, quelle est la question?


@zeckdude que qu'entendez-vous par numéro d'itération? pouvez-vous expliquer un peu plus


thingKey est le numéro d'interaction fourni par Lodash ...


vous pouvez faire Object.keys (things) .map (key => {return {[key]: things [key]}}) pour convertir en un tableau


Par numéro d'itération, je voulais dire que je voulais savoir sur quel nombre d'itérations nous nous trouvons à chaque fois que la fonction est exécutée. Donc, la première itération serait 0 , puis 1 , et ainsi de suite. Habituellement, cela est facilement atteint en accédant à l ' index mais comme la méthode lodash map fournit la clé à la place, vous devez créer une variable au préalable et itérer sur cela pour chaque boucle ou vous pouvez utiliser Object.entries () pour convertir l'objet en un tableau de tableaux contenant chacun la clé et la valeur. L'utilisation de cette approche vous donne accès au numéro d'itération (index) chaque fois que la fonction est exécutée.


3 Réponses :


3
votes

Vous pouvez utiliser Object.entries () pour obtenir la clé / valeur de Object et de la carte

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


Object.entries(things).map(([key,value],index)=>{
  console.log(key,value,index)
})

   map (currentValue, index, array)


1 commentaires

La question était spécifiquement posée pour les solutions basées sur lodash .



0
votes

Je suis toujours curieux de savoir s'il existe un moyen d'obtenir l'index à partir de la méthode lodash , mais c'est la solution que j'ai proposée et qui fonctionne plutôt bien:

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


0 commentaires

2
votes

Avec lodash, vous pouvez utiliser _.overArgs () pour générer une fonction qui convertit l'objet en entrées avec _.toPairs () et appelle _. map () avec les entrées:

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>
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);


0 commentaires