前提
htmlでテーブルを作り、ボタンにより表のソートを行おうとしています。
テストで単純なオブジェクトを作り並べ替えのjavascriptを作成し
codepenで検証しました。
実現したいこと
javascript
1const obj={"100":1,"200":2,"010":3} 2//これを変換し、 3objConv={"010":3,"100":1,"200":2} 4//というオブジェクトにしたいと思っています。 5
発生している問題・エラーメッセージ
調べていくと、100と010では文字コードとして変換されて
(10進数 UTF-8)
100->10 49 48 48
010-> 48 49 48
となるため、1バイト目の10 と48が比較され、10<48よって
100<010という結論になって希望通りの並び順にならないのではないか?
と考えています(正しいかどうかも完全に理解できていないかと思いますが。。。)
該当のソースコード
javascript
1 const obj={"100":1,"200":2,"010":3} 2 3var pairs = Object.entries(obj); 4pairs.sort(function(p1, p2){ 5 var p1Key = p1[0], p2Key = p2[0]; 6 if(p1Key < p2Key){ return -1; } 7 if(p1Key > p2Key){ return 1; } 8 return 0; 9}) 10objConv = Object.fromEntries(pairs); 11console.log(objConv); 12
補足情報(FW/ツールのバージョンなど)
CodePenにてテスト中。
よろしくお願いいたします。
オブジェクトは配列とは違い、順番がありません。
(プログラムに認識される順番は、記述順とは関係なくランダムです)
順番を並び替えたいのであれば、配列の中に別々のオブジェクトとして格納する必要があります!
私の理解力が足りず申し訳ないのですが、順番のルールはなんでしょう><?
2進数ではないんですもんね><
Cocode様
早速のごご意見ありがとうございます。
行いたいことは、「後者」の内容でソートを考えております。
お書きいただいた回答を考えている中で、おっしゃる通り「基準」を明確に考える必要があることを理解しました。
考えていた基準は数値としてとらえて、010=>10 と考えるべきだとわかりました。
とすると、キーの取得後に一旦数値に変換したうえで処理するのが正しいようにおもいます。
確かにオブジェクトは順番という概念がないため、やろうとしていること自体が間違っているのかもしれないのですね。
お返事ありがとうございます!回答投稿します。
回答1件
あなたの回答
tips
プレビュー