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

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

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

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

Q&A

解決済

2回答

2797閲覧

object内に溜めたデータを比較して、順位付けみたいなことはできますか?

dialbird

総合スコア379

JavaScript

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

0グッド

0クリップ

投稿2015/11/24 14:09

こんばんは。

端的にお伺いしたいのですが、作ったオブジェクトに対して、値をもったデータをどんどん追加していき、溜まっているデータの値を比較して上位3位までのデータをその順番に表示する、といったことはできるのでしょうか?

たとえばイメージとして、

javascript

1var today = new Date(); 2var obj = {}; 3obj.data1 = today.getFullYear().getMonth() + 4;//記録した時間帯と記録 4obj.data2 = today.getFullYear().getMonth() + 10; 5obj.data3 = today.getFullYear().getMonth() + 3; 6obj.data4 = today.getFullYear().getMonth() + 8;//現状1位が10、2位が8、3位が4 7

のように記録した時間と数値とのデータを追加していき、その現場での上位三位を選択し、それらのデータを表示するといったことは可能でしょうか?

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

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

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

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

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

guest

回答2

0

ベストアンサー

オブジェクトobjのvalue値に対してソートしたいんでしょうが、
ソート条件が提示されていないので、

JavaScript

1var obj = {}; 2obj.data1 = 2; 3obj.data2 = 1; 4obj.data3 = 4; 5obj.data4 = 3; 6obj.data5 = 10; 7//obj.dataX = [] や {} は考慮してない。 8 9// 何かしらの処理? 10 11var array = []; 12for(var i=0, key=Object.keys(obj); val=key[i]; i++ ){ 13 array.push(val); 14} 15// objの値をarrayに詰めた。 16 17// ソート処理 18 19/* 20 * 数値としてソートする場合(Date型の比較もこっち) 21 * 昇順 22 * array.sort(function(a, b){return a - b;}); 23 * -> [1, 2, 3, 4, 10] 24 * 降順 25 * array.sort(function(a, b){return b - a;}); 26 * -> [10, 4, 3, 2, 1] 27 * 28 * 文字列としてソートする場合 29 * 昇順 30 * array.sort(): 31 * -> [1, 10, 2, 3, 4] 32 * 降順 33 * array.reverse(); 34 * -> [4, 3, 2, 10, 1] 35 * 36 * その他条件(function名は適宜変更) 37 * array.sort( compare(a, b) ); 38 * 39 * function compare(a, b){ 40 * 比較条件に合わせて返却する値を決める 41 * a < b を示す場合 return -1; 42 * a = b を示す場合 return 0; 43 * a > b を示す場合 return 1; 44 * } 45 */ 46 47// 上位3位まで取り出し 48var n = (array.length >= 3) ? 3 : array.length; 49for(var i=0; i<n; i++){ 50 console.log( array[i] ); 51} 52

投稿2015/11/24 15:02

編集2015/11/24 15:21
Ryo

総合スコア507

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

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

dialbird

2015/11/25 02:20

ご返答ありがとうございます! そして返信が遅れて申し訳ありませんでした! 丁寧にコードを教えてくださったおかげで、なんとか形にすることができました! ありがとうございました!
guest

0

申し訳ありませんが、何をやりたいのかがわかりません。
ご掲示のコードは TypeError なのでまともに動かないと思うのですが…。

JavaScript

1var today = new Date(); 2today.getFullYear().getMonth(); // TypeError: today.getFullYear(...).getMonth is not a function

配列に格納して Array#sort すればお望みの動作になりそうですが、「順序を決定付ける条件」が明確でないのでコードがかけませんでした。

Re: dialbirdさん

投稿2015/11/24 14:16

think49

総合スコア18156

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

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

dialbird

2015/11/25 02:23

ご返答ありがとうございます! そして返信が遅れて申し訳ありません。 仰る通りです。頭の中でなんとなく「こんなことがやりたい」というイメージしたものをそのまま書いたので、現実性のないコードになってしまいました。 以後気をつけたいと思います。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問