Покажчик всередині функції map ()


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

Параметри

зворотний виклик - функція, яка виробляє елемент нового масиву, приймаючи три аргументи:

1) currentValue
Поточний елемент, який обробляється в масиві.

2) індекс
Індекс поточного елемента, який обробляється в масиві.

3) масив
Закликається карта масиву.


Чи завжди функція зворотного дзвінка карти має виписку про повернення? Що означає "X" у вашому коді?
Харша_К

1
@HarshKanchina mapОперація використовується для побудови нового масиву шляхом ітерації через елементи заданого масиву. Щоб відповісти на ваше запитання, так потрібно повернути заяву, і в цьому випадку вона повертає значення "X" на кожній ітерації. Таким чином, кінцевим продуктом коду буде[ 'X', 'X','X','X' ]
Самуель Тох

@Але "X" ніде не визначено То про що йдеться? Як функція знає, на що тут посилається X?
Харша_К

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);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.