yurihyp
@yurihyp (yu ryp)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Javascriptのmapがis not a function

解決したいこと

Javascriptでmapを使ってみたところ、関数名 is not a functionと怒られてしまいました。
アロー関数の書き方が悪いでしょうか?
ご教示ください。

発生している問題・エラー

const arr = [1,2,3];

const mapMultyply = arr.map((value, num) => {
    return value * num;
});

console.log(mapMultyply(arr, 3));

スクリーンショット 2022-04-18 8.04.51.png

該当するソースコード

自分で試したこと

0

2Answer

まず第一にarray.mapに引き渡すコールバックの引数は、Arrayの内側から提供されるもので、外部から直接提供するのもではありません。

mapMultyplyArray.mapを適用された後のArrayであるということがわかります。

そのmapMultyplyに対して、引数を2つ渡したのだからエラーとなったというわけ。

ではどうすればよいかと言えば、何が内側から提供され、なにを外側から提供すべきかを整理する。

ARray.mapのコールバックの引数は、上述のページに

  • currentValue - 現在処理中の要素の値
  • index(省略可) - 現在処理中の要素の配列内における添字
  • array (省略可) - map が実行されている配列

と書かれています。

そうすると

  • arr - 外側から
  • value - 内側から(配列の各々の要素)
  • num - 外側から

となる。

整理すると

const mapMultyply = function (arr, num) {
    arr.map(value => {
        return value * num;
    });
}

という感じでしょうかね(たぶん)

0Like

Comments

  1. @yurihyp

    Questioner

    ご丁寧にありがとうございます。
    試してみたところ、コンソールに出力された実行結果がundefinedになってしまいました。
    何が間違っているでしょうか?


    ```
    const arr = [1,2,3];

    const mapMultyply = function(arr, num) {
    arr.map(value => {
    return value * num;
    });
    }

    let result = mapMultyply(arr, 3)
    console.log(result)
    ```
  2. 提示したコードだと、array.mapの結果を戻り値として返してなかったわ。すまん。
  3. @yurihyp

    Questioner

    なるほど、ありがとうございます!助かります!

最近JavaScriptについて調べることが多く、質問を拝見させていただきました。
すでに解決していたようでしたが、少し別の方向からこの質問をお答えしたいと思います。
map()関数は、配列に走査し、値として配列を返しますので、
返り値を直接コンソール出力か

const arr = [1, 2, 3];
const num = 3

console.log(arr.map(value => value * num))

変数で値を受け取ってから出力か

const arr = [1, 2, 3];
const num = 3

let result = arr.map(value => value * num)
console.log(result)

同じく問題を解決することができると思います。
ただ、map()関数は.の前に指定した配列に作用するしかないので、二つ目以上のパラメータを入れるときには、どうしてもグローバルで宣告してから、です。
ご質問にお役に立てれば幸いです。

補足:毎回変数を変えるより、関数で呼び出したいなら、

const arr = [1, 2, 3];

let result = function (arr, num) {
  return arr.map(value => value * num)
}

console.log(result(arr, 3))

無名関数を変数resultとして宣告し、map()からの返り値をresult()で呼び出すとき返してもらいます。

0Like

Your answer might help someone💌