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

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

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

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

Q&A

解決済

3回答

1513閲覧

js imageオブジェクトを持つ配列をワンライナーで定義したい

kimurayu

総合スコア158

JavaScript

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

0グッド

0クリップ

投稿2017/11/04 00:23

↓今はこうやっています

js

1var imageArray = []; 2for(var i = 0, len = length; i < length; i = i + 1) { 3 imageArray[i] = new Image(); 4}

↓こうやるとimageが同じものになってしまいます

js

1var imageArray = new Array(length).fill(new Image());

うまい方法ありませんでしょうか。
↓map を使おうと思って失敗しました

js

1var imageArray = new Array(length).map(() => new Image());

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

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

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

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

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

guest

回答3

0

javascript

1var imageArray = Array.from( new Array(length), () => new Image() );

とか?

投稿2017/11/04 00:37

Lhankor_Mhy

総合スコア36104

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

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

Lhankor_Mhy

2017/11/04 00:38

あ、解決してましたか。
kimurayu

2017/11/04 00:46 編集

fromは初めて知りました!こんな方法もあるんですね!ありがとうございます!
kimurayu

2017/11/04 00:59 編集

こちらの方がメソッドが一つでスマートな感じがしますね
Lhankor_Mhy

2017/11/04 03:28

蛇足ですが。   もし、lengthの値を document.getElementsByClassName('hoge').length とかで取得しているなら、arraylikeですから、 Array.from( document.getElementsByClassName('hoge'), () => new Image() ) みたいに直接書くことができます。       arraylikeを利用した裏技的なのだと、 Array.from( {length:length}, () => new Image() ) とか Array.from( ' '.repeat(length), () => new Image() ) でも動作します。 あまり意味はないですが。
kimurayu

2017/11/04 03:56

ありがとうございます! ArrayLike という言葉も知りませんでした! {length: length} なんて書き方もあるんですね ありがとうございます
guest

0

const count = 3; const result = new Array(count).fill().map(() => ({})); expect(result).toEqual([{}, {}, {}]); // true expect(result[0]).not.toBe(result[1]); // true

投稿2017/11/04 00:51

HayatoKamono

総合スコア2415

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

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

HayatoKamono

2017/11/04 00:53

おっと、解決済みでしたね。
kimurayu

2017/11/04 00:58

ありがとうございます!Expect.jsは知りませんでした 便利そうですね
guest

0

自己解決

js

1var imageArray = new Array(length).map(() => new Image());

の結果が長さlengthでemptyだったので、mapの前に何か入れたらいいのかな?と思い

js

1var imageArray = new Array(length).fill(1).map(() => new Image());

とやったらできました!

js

1var imageArray = new Array(length).fill().map(() => new Image());

でもできました

投稿2017/11/04 00:35

編集2017/11/04 00:45
kimurayu

総合スコア158

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

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

kimurayu

2017/11/04 00:45

fill().map でもできました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問