🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaScript

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

配列

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

Q&A

解決済

4回答

1185閲覧

配列の数字の値を種類ごとに分たい

kuroishi

総合スコア53

JavaScript

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

配列

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

0グッド

0クリップ

投稿2019/12/23 19:12

お世話になっております。

今回も配列についての質問です。

var sample =[35,2,64,2,130,200,84] for(var i=0; i<260;i= i+10){ var wake=sample.filter( function( value ) { return (i<value<i+10); }); } console.log(wake);

やりたいこと
sampleの配列に入っている数字を[2,2],[35],[64],[84],[130],[200]という形で10ずつ数字の上昇と共にwakaに代入したいと考えています。しかし、この方法だとsample配列がそのまま代入されるだけで望んだ結果が得られていません。

どのようにすれば、期待の配列を得ることができるでしょうか。
よろしくお願いいたします。

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

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

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

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

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

guest

回答4

0

配列の中身は以下のようになるのだと察します。

wake[0] : 0以上- 10未満 の値があれば 配列にまとめる wake[1] : 10以上- 20未満 の値があれば 配列にまとめる : wake[25] : 250以上-260未満 の値があれば 配列にまとめる

ぱっと、思いつくのは

  1. MDN Array.sort() 「説明」 を参考に昇順で並び替える。
  2. 並び替えた配列を 10ごとに仕分けする、テンポラリ・オブジェクトtmp={}を動的に構築する。

2.1. すべての値を走査(ループ/forEach()など)して、取りうる範囲(min以上、max未満) を算出
2.2. tmp[min] が配列になっているか確認
2.2.1 配列でなければ tmp[min]=[] と初期化
2.2.2 tmp[min].push(value)
3. Object.values(tmp)

といった手順でしょうか。

範囲に該当するかどうかは、数学的に計算したほうが早そうです。

  • min : Math.floor(value/10) * 10
  • max : min + 10
  • 判別条件 : min <= val && val < max

投稿2019/12/23 21:41

AkitoshiManabe

総合スコア5434

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

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

0

「i<value<i+10」というように2つの条件を1回で書くことはできません。&&を使いましょう。wakeはforの外で空の配列として定義して、そこにfilterされた配列をpushで入れていく感じにしましょう。

投稿2019/12/23 19:53

aoies

総合スコア331

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

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

kuroishi

2019/12/23 20:59

ありがとうございます!後、もう一点ですが、途中空文字の削除はどのようにすれば良いでしょうか?
guest

0

ベストアンサー

javascript

1var a =[35,2,64,2,130,200,84]; 2var b = 10; 3var c ={}; 4var d=[]; 5a.forEach(x=>{ 6 var y=parseInt(x/b); 7 if (typeof c[y]=="undefined") c[y]=[]; 8 c[y].push(x); 9}); 10d=Object.values(c); 11console.log(d);

投稿2019/12/24 00:28

yambejp

総合スコア116661

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

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

kuroishi

2019/12/24 01:57

ご回答ありがとうございました。このやり方かと納得しました。
guest

0

スマホからなので簡単に。

最初にwakeを初期化します。
wakeの全てに[]を代入

各sample値を10で割った商が、wake配列のindex値として使える気がします。
例 35 → 3 と 余り5 →wake[3].push(35)

最後にwakeの中身で、[]では無い何らかの値が入っている要素だけをfilterで取り出せば楽と思います。

投稿2019/12/23 23:25

oikashinoa

総合スコア2826

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問