Index innerhalb der Funktion map ()

291

Ich vermisse eine Option, wie man die Indexnummer innerhalb der mapFunktion erhält Listvon Immutable.js:

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

Die Dokumentation zeigt, dass map()zurückkehrt Iterable<number, M>. Gibt es einen eleganten Weg zu dem, was ich brauche?

Zygimantas
quelle
1
Es ist nicht offensichtlich, was Sie wollen.
Zerkms
Denken Sie daran, dass mapdie Struktur des Arrays erhalten bleiben soll, dh nur seine Werte sollten transformiert werden, nicht das Array selbst.

Antworten:

529

Sie können die aktuellen Iterationen indexfür die mapMethode über den 2. Parameter abrufen.

Beispiel:

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

Ausgabe:

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

Siehe auch: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/map

Parameter

Rückruf - Funktion, die ein Element des neuen Arrays mit drei Argumenten erzeugt:

1) currentValue
Das aktuelle Element, das im Array verarbeitet wird.

2) index
Der Index des aktuellen Elements, das im Array verarbeitet wird.

3) Array
Die Array-Map wurde aufgerufen.

Samuel Toh
quelle
Sollte die Rückruffunktion der Karte immer eine return-Anweisung haben? Was bedeutet "X" in Ihrem Code?
Harsha_K
1
@HarshKanchina Die mapOperation wird zum Erstellen eines neuen Arrays verwendet, indem die Elemente eines bestimmten Arrays durchlaufen werden. Um Ihre Frage zu beantworten, ist eine return-Anweisung erforderlich. In diesem Fall wird bei jeder Iteration der Wert 'X' zurückgegeben. Somit wird das Endprodukt des Codes sein[ 'X', 'X','X','X' ]
Samuel Toh
@Aber 'X' ist nirgendwo definiert. Worauf bezieht es sich also? Woher weiß die Funktion, worauf sich X hier bezieht?
Harsha_K
3
@ HarshKanchina 'X'ist eine Zeichenfolge.
Samuel Toh
Ich möchte, dass dieser Index mit 1 beginnt. Wie kann ich das erreichen?
Reema Parakh
26

Array.prototype.map() Index:

Man kann Array.prototype.map()über das zweite Argument der Rückruffunktion auf den Index zugreifen. Hier ist ein Beispiel:

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


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

console.log(map);

Andere Argumente von Array.prototype.map():

  • Das dritte Argument der Rückruffunktion macht das Array verfügbar, auf dem die Karte aufgerufen wurde
  • Das zweite Argument von Array.map()ist ein Objekt, das der thisWert für die Rückruffunktion ist. Beachten Sie, dass Sie das reguläre functionSchlüsselwort verwenden müssen, um den Rückruf zu deklarieren, da eine Pfeilfunktion keine eigene Bindung an das thisSchlüsselwort hat.

Beispielsweise:

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

Verwenden von 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
quelle