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

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

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

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

解決済

Javascript オブジェクトの並べ替えの際に文字コードの関係で希望通りにならない。

latte217
latte217

総合スコア17

JavaScript

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

1回答

0リアクション

0クリップ

483閲覧

投稿2022/10/02 03:08

前提

htmlでテーブルを作り、ボタンにより表のソートを行おうとしています。
テストで単純なオブジェクトを作り並べ替えのjavascriptを作成し
codepenで検証しました。

実現したいこと

javascript

const obj={"100":1,"200":2,"010":3} //これを変換し、 objConv={"010":3,"100":1,"200":2} //というオブジェクトにしたいと思っています。

発生している問題・エラーメッセージ

調べていくと、100と010では文字コードとして変換されて
(10進数 UTF-8)
100->10 49 48 48
010-> 48 49 48
となるため、1バイト目の10 と48が比較され、10<48よって
100<010という結論になって希望通りの並び順にならないのではないか?
と考えています(正しいかどうかも完全に理解できていないかと思いますが。。。)

該当のソースコード

javascript

const obj={"100":1,"200":2,"010":3} var pairs = Object.entries(obj); pairs.sort(function(p1, p2){ var p1Key = p1[0], p2Key = p2[0]; if(p1Key < p2Key){ return -1; } if(p1Key > p2Key){ return 1; } return 0; }) objConv = Object.fromEntries(pairs); console.log(objConv);

補足情報(FW/ツールのバージョンなど)

CodePenにてテスト中。

よろしくお願いいたします。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

Cocode

2022/10/02 03:39 編集

オブジェクトは配列とは違い、順番がありません。 (プログラムに認識される順番は、記述順とは関係なくランダムです) 順番を並び替えたいのであれば、配列の中に別々のオブジェクトとして格納する必要があります! 私の理解力が足りず申し訳ないのですが、順番のルールはなんでしょう><? 2進数ではないんですもんね><
latte217

2022/10/02 03:43

Cocode様  早速のごご意見ありがとうございます。  行いたいことは、「後者」の内容でソートを考えております。    お書きいただいた回答を考えている中で、おっしゃる通り「基準」を明確に考える必要があることを理解しました。  考えていた基準は数値としてとらえて、010=>10 と考えるべきだとわかりました。 とすると、キーの取得後に一旦数値に変換したうえで処理するのが正しいようにおもいます。 確かにオブジェクトは順番という概念がないため、やろうとしていること自体が間違っているのかもしれないのですね。
Cocode

2022/10/02 03:50

お返事ありがとうございます!回答投稿します。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

JavaScript

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