javascript - Chỉ số bên trong hàm map()
Tôi đang thiếu một tùy chọn cách lấy số chỉ mục bên trong hàm map sử dụng List từ Immutable.js:
var list2=list1.map(mapper => { a: mapper.a, b: mapper.index??? }).toList();
Tài liệu cho thấy map() trả về Iterable<number, M>. Có cách nào tinh tế để làm những gì tôi cần không?
Câu trả lời #1
Bạn sẽ có thể lấy index của vòng lặp hiện tại cho phương thức map thông qua tham số thứ hai của nó.
Ví 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
Tham số
callback - Hàm tạo ra một phần tử của Mảng mới, nhận ba đối số:
- currentValue
Phần tử hiện tại đang được xử lý trong mảng.2) chỉ mục
Chỉ mục của phần tử hiện tại đang được xử lý trong mảng.
- mảng
Hàm map của mảng đã được gọi.
Câu trả lời #2
Chỉ mục Array.prototype.map():
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 callback. Đâ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():
- Tham số thứ ba của hàm callback tiết lộ mảng mà hàm map được gọi trên đó
- Đối số thứ hai của
Array.map()là một đối tượng sẽ là giá trịthischo hàm callback. Hãy nhớ rằng bạn phải sử dụng từ khóafunctionthông thường để khai báo callback vì một arrow function không có ràng buộc riêng với từ khóathis.
Ví dụ:
const array = [1, 2, 3, 4];
const thisObj = { prop1: 1 }
const map = array.map((x, index, array) => {
console.log(array);
console.log(this)
}, thisObj);