質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

448閲覧

配列の疑問点について

jjj001

総合スコア55

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/06/29 01:00

編集2021/06/29 01:03

Qiitaの記事を読んでいて疑問な点があり質問させてもらいました。
該当のコードは以下になります。

const nums = [...Array(10)]; nums.map((v, i) => i+1).map((i) => i*2); // [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

こちらなのですが、疑問点が2箇所あります。
const nums = [...Array(10)];ここの部分をconst nums = Array(10);このように変更したら、nums.mapを施した式もundefinedになってしまいました。こちらは何故なのでしょうか。
また、nums.map((v, i) => i+1)こちらの箇所では、引数vが配列に格納されている値であり、2つ目の引数iは添字(0~9)でありそちらが順に呼び出されていっているといった理解であっておりますでしょうか。
どなたか、ご助言の程頂けましたら幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

Array(x)で宣言した配列は中身が空なのでmapで走査することができません
[...Array(x)]することでundefindで埋まった配列が得られるので
それを利用しています。fillなどで埋めることもあります

javascript

1const nums = [...Array(10)].map((_,i)=>i+1).map(i=>i*2); 2もしくは 3const nums = Array(10).fill(null).map((_,i) =>i+1).map(i=>i*2);

vは利用価値がないので慣習として_で受けることもあります

投稿2021/06/29 01:20

yambejp

総合スコア116734

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jjj001

2021/06/29 02:00

ご回答ありがとうございます。 >Array(x)で宣言した配列は中身が空なのでmapで走査することができません [...Array(x)]することでundefindで埋まった配列が得られるので 実の所、こちら2の違いがいまいち分からない状況です... 何故[...Array(x)]このようにすることで、配列を得ることが出来るのでしょうか...?
yambejp

2021/06/29 02:37 編集

配列の空スロットについては何も反応しない場合と何か反応する場合の 2つの場合があるということです。 →何も反応しない forEachやmap関数、for in構文など for(var i in Array(10)) console.log(i); Array(10).forEach(x=>console.log(x)); console.log(Array(10).map(x=>x)); →何か反応する for of、スプレッド処理、fillやjoinなど for(var i of Array(10)) console.log(i); console.log(...Array(10)); console.log(Array(10).fill(1)); console.log(Array(10).join(",")); これは覚えて慣れるしかありません。
jjj001

2021/06/29 04:13

ありがとうございます > 配列の空スロットについては何も反応しない場合と何か反応する場合の 2つの場合があるということです。 こちらのように覚えておきたいと思います。
guest

0

ベストアンサー

このように変更したら、nums.mapを施した式もundefinedになってしまいました。こちらは何故なのでしょうか。

Array(10)で作った配列は、「要素がないundefinedすら入っていない)」という特殊な状態になります(要素のないところはmapでの処理もなされません)。[...Array(10)]とすると、「undefinedが10個入った配列」ができあがります。

引数vが配列に格納されている値であり、2つ目の引数iは添字(0~9)でありそちらが順に呼び出されていっているといった理解であっておりますでしょうか。

そのとおりです(MDN)。


なお、Array.fromを使えば、「いったんundefinedが必要個数入った配列を作る」というプロセスを経ることなく、同等のことが実行可能です(MDN)。

javascript

1Array.from({length: 10}, (v, i) => i+1).map((i) => i*2);

投稿2021/06/29 01:17

maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jjj001

2021/06/29 01:55 編集

ご回答ありがとうございます。 ご丁寧に教えて頂き恐縮なのですが、一点だけ疑問な点があります。 > Array(10)で作った配列は、「要素がない(undefinedすら入っていない)」という特殊な状態になります こちらなのですが、undefinedすら入っていないということがどういうことなのかがいまいち分からない状況です...[...Array(10)]こちらのケースではundefinedが10個作成されるということなのですが、Array(10)こちらではundefinedがない状態にも関わらず何故10個要素が格納される形となるのでしょうか...?
maisumakun

2021/06/29 02:15

> こちらではundefinedがない状態にも関わらず何故10個要素が格納される形となるのでしょうか...? 「要素0個の配列を作って、lengthだけ10に書き換えた」のと同じ状態です。
jjj001

2021/06/29 04:11

ありがとうございます。 なんとなく、イメージを掴むことが出来ました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問