Indeks w funkcji mapy ()

291

Brakuje mi opcji jak uzyskać numer indeksu wewnątrz mapfunkcji przy użyciu Listod Immutable.js:

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

Dokumentacja pokazuje, że map()zwraca Iterable<number, M>. Czy jest jakiś elegancki sposób na to, czego potrzebuję?

Zygimantas
źródło
1
Nie jest oczywiste, czego chcesz.
zerkms
Należy pamiętać, że mapma to na celu zachowanie struktury tablicy, to tylko jej wartości powinny zostać przekształcone, a nie sama tablica.

Odpowiedzi:

532

Będziesz mógł uzyskać bieżącą iterację indexdla mapmetody poprzez jej drugi parametr.

Przykład:

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

Wynik:

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

Zobacz także: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/map

Parametry

callback - Funkcja tworząca element nowej macierzy, przyjmując trzy argumenty:

1) currentValue
Bieżący element przetwarzany w tablicy.

2) indeks
Indeks bieżącego elementu przetwarzanego w tablicy.

3) tablica
Wywołano mapę tablic.

Samuel Toh
źródło
Czy funkcja zwrotna mapy powinna zawsze zawierać instrukcję return? Co oznacza „X” w twoim kodzie?
Harsha_K,
1
@HarshKanchina mapOperacja służy do konstruowania nowej tablicy przez iterację elementów danej tablicy. Aby odpowiedzieć na twoje pytanie, tak, wymagana jest instrukcja return, aw tym przypadku zwraca wartość „X” przy każdej iteracji. Tak więc końcowym produktem kodu będzie[ 'X', 'X','X','X' ]
Samuel Toh,
@ Ale „X” nigdzie nie jest zdefiniowane. O co więc chodzi? Skąd funkcja wie, do czego odnosi się X?
Harsha_K,
3
@HarshKanchina 'X'to ciąg.
Samuel Toh,
Chcę, aby ten indeks zaczynał się od 1, jak mogę to osiągnąć?
Reema Parakh
27

Array.prototype.map() indeks:

Dostęp do indeksu można uzyskać Array.prototype.map()za pomocą drugiego argumentu funkcji zwrotnej. Oto przykład:

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


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

console.log(map);

Inne argumenty Array.prototype.map():

  • Trzeci argument funkcji zwrotnej ujawnia tablicę, na której wywołano mapę
  • Drugim argumentem Array.map()jest obiekt, który będzie thiswartością funkcji wywołania zwrotnego. Pamiętaj, że musisz użyć zwykłego functionsłowa kluczowego , aby zadeklarować wywołanie zwrotne, ponieważ funkcja strzałki nie ma własnego wiązania ze thissłowem kluczowym.

Na przykład:

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
źródło
2

Za pomocą 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
źródło