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

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

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

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

4回答

5665閲覧

javascriptで連想配列のソート

uer03108

総合スコア194

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2018/05/09 09:51

編集2018/05/10 10:59

javascriptで連想配列のソートは出来るでしょうか。
下記サイトを参照しましたが、連想配列ではundefindedになりました。

https://qiita.com/PianoScoreJP/items/f0ff7345229871039672
https://qiita.com/ShaderKid/items/ac790b1f2dc387477d4f

javascript

1 2 //ソート対象の連想配列 3 var aryParam = {}; 4 5 //データ配列 6 var ary_1 = {val1 : 2, val_2 : 3, str_1 : "ああああ", str_2 : "いいいい"}; 7 var ary_2 = {val1 : 4, val_2 : 4, str_1 : "うううう", str_2 : "ええええ"}; 8 var ary_3 = {val1 : 3, val_2 : 1, str_1 : "おおおお", str_2 : "かかかか"}; 9 var ary_4 = {val1 : 1, val_2 : 2, str_1 : "きききき", str_2 : "くくくく"}; 10 11 //配列に格納 12 aryParam["id_1"] = ary_1; 13 aryParam["id_2"] = ary_2; 14 aryParam["id_3"] = ary_3; 15 aryParam["id_4"] = ary_4; 16 17 //配列をソート 18 19 //val1でソート 20 // aryParam["id_4"] = ary_4; //val1:1 21 // aryParam["id_1"] = ary_1; //val1:2 22 // aryParam["id_3"] = ary_3; //val1:3 23 // aryParam["id_2"] = ary_2; //val1:4 24 25 //val2でソート 26 // aryParam["id_3"] = ary_3; //val2:1 27 // aryParam["id_4"] = ary_4; //val2:2 28 // aryParam["id_1"] = ary_1; //val2:3 29 // aryParam["id_2"] = ary_2; //val2:4 30 31 /* ソートというよりは、val1またはval2の順番で値を取得したい */ 32

追記
ご回答ありがとうございました。
今回は、連想配列のキーを任意順に取り出す関数を作成することに致しました。

javascript

1 2 //ソートされたid配列 3 var aryNewId = sortBy(aryParam, "val_1", "asc"); 4 5 //idループ 6 for(id in aryNewId){ 7 console.log("----"); 8 console.log(id); 9 console.log(aryParam[id]["val_1"]); 10 console.log(aryParam[id]["val_2"]); 11 console.log(aryParam[id]["str_1"]); 12 console.log(aryParam[id]["str_2"]); 13 } 14

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

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

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

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

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

kei344

2018/05/10 11:32

まだ質問が「受付中」になっていますが、いったんご自身の回答をもって「解決済」にされてはいかがでしょうか。
guest

回答4

0

Map.prototype.sort

オブジェクト≠連想配列

javascriptで連想配列のソート

JavaScriptのオブジェクトは連想配列ではありません
つまり、他の言語にあるような連想配列の機能を備えていません。

  • プロパティ列挙順序が定義されていません
  • length プロパティのような配列の長さを測る機能を持ちません
  • オブジェクト初期化子で定義したオブジェクトは __proto__ に Object 型もしくは Null 型以外の値を代入できません

詳細は下記リンク先を参照して下さい。

Re: uer03108 さん

投稿2018/05/09 15:01

think49

総合スコア18162

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

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

0

そもそも、javascriptのオブジェクト(連想配列)のプロパティに順序はないですよ。

投稿2018/05/09 10:05

Lhankor_Mhy

総合スコア36089

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

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

uer03108

2018/05/09 12:12

ご回答ありがとうございます。 勉強になりました。
guest

0

ベストアンサー

提示されたURLはどちらも配列に入れているため、配列メソッドが使用できる状態です。
また、{}はオブジェクトなので、「連想配列」と呼ぶのは微妙だと思います。

提示されたURLのようにオブジェクトの配列を使うか、Mapを使用するかどちらかだと思います。

【連想配列はMapを使うべきは本当か? - Qiita】
https://qiita.com/raccy/items/816a322fb330193e788b

投稿2018/05/09 10:00

kei344

総合スコア69407

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

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

uer03108

2018/05/09 12:06

ご回答ありがとうございました。 javascriptにmapあったんですね。。 知りませんでした。 割と一般的に使用されるのでしょうか。
kei344

2018/05/09 13:50

> 割と一般的に使用されるのでしょうか。 IE11以降であれば使用できるので、普通に使えますね。
uer03108

2018/05/09 15:14

有難うございます。 時間がある時に読んでみます(難しそうですが)。 直感的には、連想配列≒Mapの様な気が致します。
guest

0

aryParam がオブジェクトだから難しいのでは?
オブジェクト内のitemの参照順位は不定なので。
もしaryParamが配列ならソートは可能でしょう

sample

一応サンプル

javascript

1var a= [ 2 {val1 : 2, val_2 : 3, str_1 : "ああああ", str_2 : "いいいい"}, 3 {val1 : 4, val_2 : 4, str_1 : "うううう", str_2 : "ええええ"}, 4 {val1 : 3, val_2 : 1, str_1 : "おおおお", str_2 : "かかかか"}, 5 {val1 : 1, val_2 : 2, str_1 : "きききき", str_2 : "くくくく"}, 6]; 7var b=a.sort(function(x,y){ 8 return x.val1===y.val1?0:(x.val1>y.val1?1:-1); 9}).map(function(x){ 10 return x; 11}); 12console.log(b); 13var c=a.sort(function(x,y){ 14 return x.val_2===y.val_2?0:(x.val_2>y.val_2?1:-1); 15}).map(function(x){ 16 return x; 17}); 18console.log(c);

投稿2018/05/09 10:02

編集2018/05/09 11:59
yambejp

総合スコア114814

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

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

uer03108

2018/05/09 12:07

サンプル有難うございます。 参考にさせて頂きます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問