Index à l'intérieur de la fonction map ()

291

Il me manque une option comment obtenir le numéro d'index dans la mapfonction à l' aide Listde Immutable.js:

var list2 = list1.map(mapper => { a: mapper.a, b: mapper.index??? }).toList();

La documentation montre que map()revient Iterable<number, M>. Existe-t-il un moyen élégant de répondre à mes besoins?

Zygimantas
la source
1
Ce n'est pas évident ce que vous voulez.
zerkms
Gardez à l'esprit que cela mapest censé préserver la structure du tableau, c'est-à-dire que seules ses valeurs doivent être transformées et non le tableau lui-même.

Réponses:

530

Vous pourrez obtenir l'itération actuelle de indexla mapméthode via son 2e paramètre.

Exemple:

const list = [ 'h', 'e', 'l', 'l', 'o'];
list.map((currElement, index) => {
  console.log("The current iteration is: " + index);
  console.log("The current element is: " + currElement);
  console.log("\n");
  return currElement; //equivalent to list[index]
});

Production:

The current iteration is: 0 <br>The current element is: h

The current iteration is: 1 <br>The current element is: e

The current iteration is: 2 <br>The current element is: l

The current iteration is: 3 <br>The current element is: l 

The current iteration is: 4 <br>The current element is: o

Voir aussi: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/map

Paramètres

callback - Fonction qui produit un élément du nouveau tableau, en prenant trois arguments:

1) currentValue
L'élément en cours de traitement dans le tableau.

2) index
L'index de l'élément en cours de traitement dans le tableau.

3) tableau
La carte du tableau a été invoquée.

Samuel Toh
la source
La fonction de rappel de la carte doit-elle toujours avoir une instruction de retour? Que signifie «X» dans votre code?
Harsha_K
1
@HarshKanchina L' mapopération est utilisée pour construire un nouveau tableau en itérant à travers les éléments d'un tableau donné. Pour répondre à votre question, oui, une déclaration de retour est requise et, dans ce cas, elle renvoie la valeur «X» à chaque itération. Ainsi, le produit final du code sera[ 'X', 'X','X','X' ]
Samuel Toh
@Mais 'X' n'est défini nulle part. Alors à quoi cela fait-il référence? Comment la fonction sait-elle à quoi X fait référence ici?
Harsha_K
3
@HarshKanchina 'X'est une chaîne.
Samuel Toh
Je veux que cet index commence par 1, comment puis-je y parvenir?
Reema Parakh
27

Array.prototype.map() indice:

On peut accéder à l'index Array.prototype.map()via le deuxième argument de la fonction de rappel. Voici un exemple:

const array = [1, 2, 3, 4];


const map = array.map((x, index) => {
  console.log(index);
  return x + index;
});

console.log(map);

Autres arguments de Array.prototype.map():

  • Le troisième argument de la fonction de rappel expose le tableau sur lequel la carte a été appelée
  • Le deuxième argument de Array.map()est un objet qui sera la thisvaleur de la fonction de rappel. Gardez à l'esprit que vous devez utiliser le mot clé standardfunction pour déclarer le rappel car une fonction flèche n'a pas sa propre liaison au thismot clé.

Par exemple:

const array = [1, 2, 3, 4];

const thisObj = {prop1: 1}


const map = array.map( function (x, index, array) {
  console.log(array);
  console.log(this)
}, thisObj);

Willem van der Veen
la source
2

Utilisation de Ramda:

import {addIndex, map} from 'ramda';

const list = [ 'h', 'e', 'l', 'l', 'o'];
const mapIndexed = addIndex(map);
mapIndexed((currElement, index) => {
  console.log("The current iteration is: " + index);
  console.log("The current element is: " + currElement);
  console.log("\n");
  return 'X';
}, list);
David
la source