web-dev-qa-db-ja.com

JavaScript Array#map:インデックス引数

私の質問は、JavaScriptの配列のmapメソッドに関するものです。

処理中の配列の現在の要素のインデックスである2番目の引数を取る関数をそれに渡すことができますが、...目的は何ですか?あなたがそれをするとき何が起こり、そうしないときの違いは何ですか?

この機能を何に使用しますか?

48
Claudio

現在のアイテムのインデックスは常にコールバック関数に渡されます。関数で宣言しない場合の唯一の違いは、名前でアクセスできないことです。

例:

[1,2,3].map(function(o, i){
    console.log(i);
    return 0;
});

[1,2,3].map(function(o){
    console.log(arguments[1]); // it's still there
    return 0;
});

出力:

0
1
2
0
1
2

デモ: http://jsfiddle.net/Guffa/k4x5vfzj/

92
Guffa

要素のインデックスが重要な場合があります。たとえば、次のマップは2番目の要素をすべて0に置き換えます。

var a = [1, 2, 3, 4, 5, 6];
var b = a.map(function(el, index) {
    return index % 2 ? 0 : el;
});
console.log(b);

出力:

[1, 0, 3, 0, 5, 0]
14
Tim Jansen

map 関数の説明は次のとおりです。

arr.map(callback[, thisArg])

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

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

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

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

Map関数は、コールバック関数を引数として取ります(編集前の質問で最初に述べたように、引数としてインデックスを取りません)。コールバック関数にはパラメータとしてインデックスがあります。コールバックは自動的に呼び出されるため、自分でインデックスを提供することはありません。現在の値のみが必要な場合は、他のパラメーターを省略できます。

6
kapex