Índice dentro da função map ()

291

Eu estou faltando uma opção de como obter o número de índice dentro da mapfunção utilizando Lista partir Immutable.js:

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

A documentação mostra que map()retorna Iterable<number, M>. Existe alguma maneira elegante de o que eu preciso?

Zygimantas
fonte
1
Não é óbvio o que você quer.
Zerkms 14/07/16
Lembre-se de que mapdeve preservar a estrutura da matriz, apenas seus valores devem ser transformados, e não a matriz em si.

Respostas:

530

Você poderá obter as iterações atuais indexdo mapmétodo através do seu 2º parâmetro.

Exemplo:

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

Resultado:

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

Veja também: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/map

Parâmetros

callback - Função que produz um elemento da nova matriz, usando três argumentos:

1) currentValue
O elemento atual que está sendo processado na matriz.

2) índice
O índice do elemento atual que está sendo processado na matriz.

3) matriz
O mapa da matriz foi chamado.

Samuel Toh
fonte
A função de retorno de chamada do mapa deve sempre ter uma declaração de retorno? O que significa 'X' no seu código?
Harsha_K
1
@HarshKanchina A mapoperação é usada para construir uma nova matriz, iterando pelos elementos de uma determinada matriz. Para responder sua pergunta, sim, é necessária uma declaração de retorno e, nesse caso, ele está retornando o valor 'X' em cada iteração. Assim, o produto final do código será[ 'X', 'X','X','X' ]
Samuel Toh
@Mas 'X' não está definido em nenhum lugar. Então, a que isso se refere? Como a função sabe a que X se refere aqui?
Harsha_K
3
@HarshKanchina 'X'é uma string.
Samuel Toh
Eu quero que este índice comece com 1, como eu poderia conseguir isso?
Reema Parakh
26

Array.prototype.map() índice:

Pode-se acessar o índice Array.prototype.map()através do segundo argumento da função de retorno de chamada. Aqui está um exemplo:

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


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

console.log(map);

Outros argumentos de Array.prototype.map():

  • O terceiro argumento da função de retorno de chamada expõe a matriz na qual o mapa foi chamado
  • O segundo argumento de Array.map()é um objeto que será o thisvalor da função de retorno de chamada. Lembre-se de que você deve usar a palavra-chave regularfunction para declarar o retorno de chamada, pois uma função de seta não possui sua própria ligação à thispalavra - chave.

Por exemplo:

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

Usando o 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
fonte