mapについて | 質問掲示板 | 独学!未経験からWebデザイナーになる!!

Web制作や付随することを何でも質問できるコーナーです。

未経験からWebデザイナーになる!! > 質問掲示板 > カテゴリ: JavaScript > mapについて

mapについて

当サイトのリニューアル作業に時間をあてるため、掲示板の投稿は当分停止させていただきます。
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];

var ret = arr.map(Math.pow);


console.log(ret);



下記の出力となりますが、
[1, 2, 9, 64, 625, 7776, 117649, 2097152, 43046721]



なぜ、上記の出力となりますか。

powは引数が2個必要の為、エラーとなると想定していました。。。
龍さん、こんにちは。

念のためマニュアルをチェックして見てみたところ、arr.mapで呼び出すコールバック関数には、自動的に以下のパラメータが与えられるようです。

function(value, index, array) {
}


valueは配列の値、indexは配列のインデックス、arrayは配列全体です。
以下の部分を、

var ret = arr.map(Math.pow);

以下のように変更すると確認しやすいと思います。

var ret = arr.map(function(value, index, array) {
console.log(value + ' ' + index);
console.log(array);
});



というわけで、以下は
var ret = arr.map(Math.pow);

以下の様な感じで呼び出されていたため、
Math.pow(1, 0, array);
Math.pow(2, 1, array);
Math.pow(3, 2, array);
// ~略~


当初のような出力結果となったと思われます。
(Math.powにarrayの第三引数があっても無視されているようでした)

参考: Array.prototype.map() - JavaScript | MDN
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/map"]https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/map

※システム上リンクが張れなかったのでURLのみ掲載