ดัชนีภายในแผนที่ () ฟังก์ชั่น


291

ฉันไม่มีตัวเลือกวิธีรับหมายเลขดัชนีภายในmapฟังก์ชันที่ใช้ListจากImmutable.js:

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

เอกสารที่แสดงให้เห็นว่าผลตอบแทนmap() Iterable<number, M>มีวิธีที่สง่างามกับสิ่งที่ฉันต้องการหรือไม่?


1
ไม่ชัดเจนว่าคุณต้องการอะไร
zerkms

โปรดจำไว้ว่าmapควรจะรักษาโครงสร้างของอาเรย์นั่นคือค่าของมันเท่านั้นที่ควรจะเปลี่ยนไม่ใช่อาเรย์เอง

คำตอบ:


532

คุณจะสามารถรับการวนซ้ำปัจจุบันindexสำหรับmapวิธีผ่านพารามิเตอร์ที่ 2

ตัวอย่าง:

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

เอาท์พุท:

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

ดูเพิ่มเติมที่: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/map

พารามิเตอร์

callback - ฟังก์ชันที่สร้างองค์ประกอบของ Array ใหม่โดยรับสามอาร์กิวเมนต์:

1) currentValue
องค์ประกอบปัจจุบันที่ถูกประมวลผลในอาร์เรย์

2) ดัชนี
ดัชนีขององค์ประกอบปัจจุบันที่ถูกประมวลผลในอาร์เรย์

3) array
แผนที่อาเรย์ถูกเรียกใช้


ฟังก์ชันการเรียกกลับของแผนที่ควรมีข้อความสั่งคืนเสมอหรือไม่ 'X' ในรหัสของคุณหมายถึงอะไร
Harsha_K

1
@HarshKanchina การmapดำเนินการใช้สำหรับการสร้างอาร์เรย์ใหม่โดยวนซ้ำผ่านองค์ประกอบของอาร์เรย์ที่กำหนด เพื่อตอบคำถามของคุณใช่จำเป็นต้องมีคำสั่ง return และในกรณีนี้มันจะคืนค่า 'X' ในแต่ละการวนซ้ำ ดังนั้นผลิตภัณฑ์ขั้นสุดท้ายของรหัสจะเป็น[ 'X', 'X','X','X' ]
ซามูเอล Toh

@But 'X' ไม่ได้ถูกกำหนดไว้ทุกที่ ดังนั้นมันหมายถึงอะไร ฟังก์ชั่นรู้ว่า X หมายถึงอะไรที่นี่?
Harsha_K

3
@HarshKanchina 'X'เป็นสตริง
ซามูเอลโตห์

ฉันต้องการให้ดัชนีนี้เริ่มต้นด้วย 1 ฉันจะทำสิ่งนี้ได้อย่างไร
Reema Parakh

27

Array.prototype.map() ดัชนี:

หนึ่งสามารถเข้าถึงดัชนีArray.prototype.map()ผ่านอาร์กิวเมนต์ที่สองของฟังก์ชั่นการโทรกลับ นี่คือตัวอย่าง:

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


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

console.log(map);

ข้อโต้แย้งอื่น ๆ ของArray.prototype.map():

  • อาร์กิวเมนต์ที่สามของฟังก์ชันการเรียกกลับแสดงอาร์เรย์ที่แผนที่ถูกเรียกใช้
  • อาร์กิวเมนต์ที่สองของArray.map()เป็นวัตถุซึ่งจะเป็นthisค่าสำหรับฟังก์ชั่นการโทรกลับ โปรดทราบว่าคุณต้องใช้คำหลักปกติfunctionเพื่อประกาศการโทรกลับเนื่องจากฟังก์ชั่นลูกศรไม่มีผลผูกพันกับthisคำหลักของตนเอง

ตัวอย่างเช่น:

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

ใช้ 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);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.