1. ホーム
  2. javascript

[解決済み] この状況で .map() は何をしているのでしょうか?

2023-02-01 20:26:32

質問

Chromeのコンソールを使って、入力と出力を行っています。

[0].map(Array);

[[0, 0, [0]]]; // output

ここで何が起こっているのか?

EDIT

なぜこれが気になるかというと、次のようなものがあるからです。

[0].map(String);

を返します。

["0"];

そして、そうではなく

["0", "0", "String"]

どのように解決するのですか?

この .map() 機能 Array() 関数を三つの引数で呼び出しています。 0 である配列要素の値、その要素のインデックス、さらに 0 を含む、配列全体への参照です。

つまり、こんな感じです。

var a = [0];
var index = 0
Array(a[index], index, a);   // create array with three elements

で返される配列は Array() が返す配列の最初の要素になります。 .map() が作成する配列の最初の要素になるため、ネストのレベルが増えることになります。 [[0, 0, [0]]] の結果で余分なレベルのネストが発生します。

あなたの編集に関するEDIT:あなたが言うとき [0].map(String); と書くと、結果として String() のように同じ三つの引数で呼び出されます。 String(a[index], index, a) と同じように3つの引数で呼び出されますが String() 関数は最初の引数以外を無視するのに対して Array() は与えられた引数を全て使用します。