Índice dentro de la función map ()

291

Me falta una opción de cómo obtener el número de índice dentro de la mapfunción utilizando Listdesde Immutable.js:

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

La documentación muestra que map()regresa Iterable<number, M>. ¿Hay alguna forma elegante de lo que necesito?

Zygimantas
fuente
1
No es obvio lo que quieres.
zerkms
Tenga en cuenta que mapse supone que preserva la estructura de la matriz que es, solo sus valores deben transformarse, no la matriz en sí.

Respuestas:

530

Podrá obtener las iteraciones actuales indexpara el mapmétodo a través de su segundo parámetro.

Ejemplo:

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

Salida:

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

Ver también: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/map

Parámetros

devolución de llamada: función que produce un elemento de la nueva matriz, tomando tres argumentos:

1) currentValue
El elemento actual que se procesa en la matriz.

2) índice
El índice del elemento actual que se procesa en la matriz.

3) matriz
El mapa de matriz fue invocado.

Samuel Toh
fuente
¿Debería la función de devolución de llamada del mapa siempre tener una declaración de devolución? ¿Qué significa 'X' en su código?
Harsha_K
1
@HarshKanchina La mapoperación se utiliza para construir una nueva matriz iterando a través de los elementos de una matriz determinada. Para responder a su pregunta, sí, se requiere una declaración de devolución, y para este caso está devolviendo el valor 'X' en cada iteración. Por lo tanto, el producto final del código será[ 'X', 'X','X','X' ]
Samuel Toh
@ Pero 'X' no está definido en ningún lado. Entonces, ¿a qué se refiere? ¿Cómo sabe la función a qué se refiere X aquí?
Harsha_K
3
@HarshKanchina 'X'es una cadena.
Samuel Toh
Quiero que este índice comience con 1, ¿cómo podría lograr esto?
Reema Parakh
26

Array.prototype.map() índice:

Se puede acceder al índice a Array.prototype.map()través del segundo argumento de la función de devolución de llamada. Aquí hay un ejemplo:

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


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

console.log(map);

Otros argumentos de Array.prototype.map():

  • El tercer argumento de la función de devolución de llamada expone la matriz en la que se invocó el mapa
  • El segundo argumento de Array.map()es un objeto que será el thisvalor de la función de devolución de llamada. Tenga en cuenta que debe usar la palabra clave normalfunction para declarar la devolución de llamada ya que una función de flecha no tiene su propio enlace a la thispalabra clave.

Por ejemplo:

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
fuente
2

Usando 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
fuente