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 Réponses :
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)
La question était spécifiquement posée pour les solutions basées sur lodash
.
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 } });
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);
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 utiliserObject.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
, puis1
, et ainsi de suite. Habituellement, cela est facilement atteint en accédant à l 'index
mais comme la méthode lodashmap
fournit laclé
à la place, vous devez créer une variable au préalable et itérer sur cela pour chaque boucle ou vous pouvez utiliserObject.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.