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


291

from mapを使用Listして関数内のインデックス番号を取得するオプションがありませんImmutable.js

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

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


1
あなたが何を望んでいるかは明らかではありません。
zerkms 2016

心に留めておくmapある配列の構造を維持することになっているが、唯一その価値はない配列自体を変換する必要があります。

回答:


530

2番目のパラメーターを使用indexして、mapメソッドの現在の反復を取得できます。

例:

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

パラメーター

callback-3つの引数を取って、新しい配列の要素を生成する関数:

1)currentValue
配列で処理されている現在の要素。

2)index
配列で処理されている現在の要素のインデックス。

3)配列
配列マップが要求されました。


マップのコールバック関数には常にreturnステートメントが必要ですか?コードで「X」は何を意味しますか?
Harsha_K 2017

1
@HarshKanchina map操作は、指定された配列の要素を反復処理して新しい配列を構築するために使用されます。あなたの質問に答えるには、はい、returnステートメントが必要です。この場合、各反復で値「X」を返します。したがって、コードの最終製品は次のようになります[ 'X', 'X','X','X' ]
Samuel Toh 2017

@しかし、「X」はどこにも定義されていません。それでそれは何を指しているのですか?関数は、Xがここで何を参照しているかをどのようにして知るのですか?
Harsha_K

3
@HarshKanchina 'X'は文字列です。
Samuel Toh

このインデックスを1から始めたいのですが、どうすればこれを達成できますか?
Reema Parakh

26

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

Array.prototype.map()コールバック関数の2番目の引数を介してインデックスにアクセスできます。次に例を示します。

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番目の引数は、マップが呼び出された配列を公開します
  • の2番目の引数は、コールバック関数の値Array.map()となるオブジェクトthisです。arrow関数にはキーワードへの独自のバインディングがないため、コールバックを宣言するためにregular 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);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.