Fungsi indeks di dalam peta ()

291

Saya kehilangan opsi cara mendapatkan nomor indeks di dalam mapfungsi menggunakan Listdari Immutable.js:

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

Dokumentasi menunjukkan bahwa map()pengembalian Iterable<number, M>. Apakah ada cara elegan untuk apa yang saya butuhkan?

Zygimantas
sumber
1
Tidak jelas apa yang Anda inginkan.
zerkms
Perlu diingat bahwa mapseharusnya melestarikan struktur array, yaitu hanya nilainya yang harus diubah bukan array itu sendiri.

Jawaban:

530

Anda akan bisa mendapatkan iterasi saat ini indexuntuk mapmetode melalui parameter ke-2.

Contoh:

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

Keluaran:

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

Lihat juga: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/map

Parameter

callback - Fungsi yang menghasilkan elemen dari Array baru, mengambil tiga argumen:

1) currentValue
Elemen saat ini sedang diproses dalam array.

2) indeks
Indeks elemen saat ini sedang diproses dalam array.

3) array
Peta array dipanggil.

Samuel Toh
sumber
Haruskah fungsi callback peta selalu memiliki pernyataan kembali? Apa arti 'X' dalam kode Anda?
Harsha_K
1
@ HarshKanchina mapOperasi ini digunakan untuk membangun array baru dengan mengulangi elemen-elemen dari array yang diberikan. Untuk menjawab pertanyaan Anda, ya pernyataan pengembalian diperlukan, dan untuk kasus ini, ia mengembalikan nilai 'X' pada setiap iterasi. Dengan demikian produk akhir dari kode tersebut adalah[ 'X', 'X','X','X' ]
Samuel Toh
@Tapi 'X' tidak didefinisikan di mana pun. Jadi apa yang dimaksud? Bagaimana fungsi tahu apa yang X rujuk di sini?
Harsha_K
3
@ HarshKanchina 'X'adalah sebuah string.
Samuel Toh
Saya ingin indeks ini dimulai dengan 1, bagaimana saya bisa mencapai ini?
Reema Parakh
26

Array.prototype.map() indeks:

Seseorang dapat mengakses indeks Array.prototype.map()melalui argumen kedua dari fungsi panggilan balik. Berikut ini sebuah contoh:

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


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

console.log(map);

Argumen lain dari Array.prototype.map():

  • Argumen ketiga dari fungsi callback memperlihatkan array di mana peta dipanggil
  • Argumen kedua Array.map()adalah objek yang akan menjadi thisnilai untuk fungsi panggilan balik. Ingatlah bahwa Anda harus menggunakan kata kunci biasafunction untuk menyatakan panggilan balik karena fungsi panah tidak memiliki ikatan sendiri dengan thiskata kunci.

Sebagai contoh:

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

Menggunakan 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
sumber