Chỉ mục bên trong hàm map ()


291

Tôi đang thiếu một tùy chọn làm thế nào để lấy số chỉ mục bên trong maphàm bằng cách sử dụng Listtừ Immutable.js:

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

Tài liệu chương trìnhmap()lợi nhuận Iterable<number, M>. Có cách nào tao nhã cho những gì tôi cần không?


1
Không rõ ràng những gì bạn muốn.
zerkms

Hãy nhớ rằng mapcần phải bảo toàn cấu trúc của mảng, chỉ nên chuyển đổi các giá trị của nó chứ không phải chính mảng đó.

Câu trả lời:


529

Bạn sẽ có thể nhận được các lần lặp hiện tại indexcho mapphương thức thông qua tham số thứ 2 của nó.

Thí dụ:

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

Đầu ra:

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

Xem thêm: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/map

Thông số

gọi lại - Hàm tạo ra một phần tử của Mảng mới, nhận ba đối số:

1) currentValue
Phần tử hiện tại đang được xử lý trong mảng.

2) index Chỉ
mục của phần tử hiện tại đang được xử lý trong mảng.

3) mảng
Bản đồ mảng được gọi theo.


Chức năng gọi lại của bản đồ phải luôn có câu lệnh trả về? 'X' có nghĩa là gì trong mã của bạn?
Harsha_K

1
@HarshKanchina mapHoạt động được sử dụng để xây dựng một mảng mới bằng cách lặp qua các phần tử của một mảng nhất định. Để trả lời câu hỏi của bạn, có một câu lệnh trả về là bắt buộc và trong trường hợp này, nó sẽ trả về giá trị 'X' trên mỗi lần lặp. Do đó, sản phẩm cuối cùng của mã sẽ là[ 'X', 'X','X','X' ]
Samuel Toh

@But 'X' không được xác định ở bất cứ đâu. Vậy nó đề cập đến cái gì? Làm thế nào để hàm biết X đề cập đến điều gì ở đây?
Harsha_K

3
@HarshKanchina 'X'là một chuỗi.
Samuel Toh

Tôi muốn chỉ số này bắt đầu bằng 1, làm thế nào tôi có thể đạt được điều này?
Reema Parakh

26

Array.prototype.map() mục lục:

Người ta có thể truy cập chỉ mục Array.prototype.map()thông qua đối số thứ hai của hàm gọi lại. Đây là một ví dụ:

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


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

console.log(map);

Các đối số khác của Array.prototype.map():

  • Đối số thứ ba của hàm gọi lại hiển thị mảng mà bản đồ được gọi
  • Đối số thứ hai của Array.map()là một đối tượng sẽ là thisgiá trị cho hàm gọi lại. Hãy nhớ rằng bạn phải sử dụng từ khóa thông thườngfunction để khai báo cuộc gọi lại vì hàm mũi tên không có ràng buộc riêng với thistừ khóa.

Ví dụ:

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

Sử dụng 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);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.