Indice all'interno della funzione map ()


291

Mi manca un'opzione su come ottenere il numero indice all'interno della mapfunzione utilizzando Listda Immutable.js:

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

La documentazione mostra che map()ritorna Iterable<number, M>. Esiste un modo elegante per ciò di cui ho bisogno?


1
Non è ovvio quello che vuoi.
zerkms,

Tieni presente che mapsi suppone che preservi la struttura dell'array che è, solo i suoi valori dovrebbero essere trasformati non l'array stesso.

Risposte:


532

Sarai in grado di ottenere le iterazioni correnti indexper il mapmetodo attraverso il suo secondo parametro.

Esempio:

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

Produzione:

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

Vedi anche: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/map

parametri

callback - Funzione che produce un elemento del nuovo array, prendendo tre argomenti:

1) currentValue
L'elemento corrente in elaborazione nell'array.

2) indice
L'indice dell'elemento corrente in elaborazione nell'array.

3) array
È stata richiamata la mappa dell'array.


La funzione di callback della mappa dovrebbe sempre avere un'istruzione return? Cosa significa "X" nel tuo codice?
Harsha_K,

1
@HarshKanchina L' mapoperazione viene utilizzata per costruire un nuovo array ripetendo gli elementi di un determinato array. Per rispondere alla tua domanda, sì, è richiesta una dichiarazione di ritorno, e in questo caso restituisce il valore 'X' su ogni iterazione. Quindi il prodotto finale del codice sarà[ 'X', 'X','X','X' ]
Samuel Toh, l'

@Ma 'X' non è definito da nessuna parte. Quindi a cosa si riferisce? Come fa la funzione a sapere a cosa si riferisce X qui?
Harsha_K,

3
@HarshKanchina 'X'è una stringa.
Samuel Toh,

Voglio che questo indice inizi con 1, come posso raggiungere questo obiettivo?
Reema Parakh

27

Array.prototype.map() indice:

È possibile accedere all'indice Array.prototype.map()tramite il secondo argomento della funzione di callback. Ecco un esempio:

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


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

console.log(map);

Altri argomenti di Array.prototype.map():

  • Il terzo argomento della funzione di callback espone l'array su cui è stata chiamata la mappa
  • Il secondo argomento di Array.map()è un oggetto che sarà il thisvalore per la funzione di callback. Tenere presente che è necessario utilizzare la parola chiave normalefunction per dichiarare la richiamata poiché una funzione freccia non ha il proprio legame con la thisparola chiave.

Per esempio:

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


2

Utilizzando 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);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.