it-swarm.com.ru

Индекс внутри функции map ()

Мне не хватает опции, как получить номер индекса внутри функции map, используя List из Immutable.js:

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

Документация показывает что map() возвращает Iterable<number, M>. Есть ли какой-нибудь элегантный способ, что мне нужно?

140
Zygimantas

Вы сможете получить текущую итерацию index для API map через его 2-й параметр.

Смотри также:https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/map

Параметры

перезвоните - Функция, которая производит элемент нового массива, принимая три аргумента:

1) текущее значение
Текущий элемент, обрабатываемый в массиве.

2) индекс
Индекс текущего элемента, обрабатываемого в массиве.

3) массив
Карта массива была вызвана.

Пример:

var 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 'X';
});

Результат:

Текущая итерация: 0 
Текущий элемент: h

Текущая итерация: 1 
Текущий элемент: e

Текущая итерация: 2 
Текущий элемент: l

Текущая итерация: 3 
Текущий элемент: l

Текущая итерация: 4 
Текущий элемент: o

283
Samuel Toh

Array.prototype.map() index:

Доступ к индексу 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);

6
Willem van der Veen

Используя Рамду:

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);
0
David