web-dev-qa-db-ja.com

Map()関数内のインデックス

Immutable.jsmapを使用してList関数内のインデックス番号を取得する方法がありません。

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

ドキュメンテーションはmap()Iterable<number, M>を返すことを示しています。私が必要としているものにエレガントな方法はありますか?

162
Zygimantas

index APIの現在の反復mapは、その2番目のパラメータを通じて取得できます。

以下も参照してください。 https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/map

パラメータ

callback - 3つの引数を取り、新しいArrayの要素を生成する関数

1)currentValue
配列内で現在処理中の要素。

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
現在の要素は次のとおりです。

現在の繰り返しは、3です。
現在の要素は次のとおりです。

現在の反復は以下のとおりです。4
現在の要素は次のとおりです。

320
Samuel Toh

Array.prototype.map()インデックス:

コールバック関数の2番目の引数を介してインデックス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()の他の引数:

  • コールバック関数の3番目の引数は、マップが呼び出された配列を公開します。
  • Array.map()の2番目の引数は、コールバック関数の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);
11

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