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

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

詳細はこちら
JavaScript

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

Q&A

解決済

4回答

3518閲覧

Objectの列挙順について

naka0512

総合スコア5

JavaScript

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

0グッド

0クリップ

投稿2021/03/30 06:51

編集2021/03/30 06:53

前提・実現したいこと

オブジェクトのキー順に表示をさせたいです。

JavaScript

1const object = { 2 1000: 'テスト1', 3 0: 'テスト2', 4 1001: 'テスト3' 5}; 6 7for (const [key, value] of Object.entries(object)) { 8 console.log(`${key}: ${value}`); 9}

log

1> "1000: テスト1" 2> "0: テスト2" 3> "1001: テスト3"

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

以下、連番で列挙されます。
Mapは使用せず、Objectで、連番を無視して、列挙する事は可能でしょうか。

log

1> "0: テスト2" 2> "1000: テスト1" 3> "1001: テスト3"

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

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

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

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

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

Lhankor_Mhy

2021/03/30 07:49

当方の環境では連番で表示されました。(Win10 Firefox87 Chrome89) naka0512さんの環境を示した方がいいかもしれません。
naka0512

2021/03/30 08:10

ご指摘ありがとうございます。 私も環境で連番で表示されておりました。試行錯誤でコードを書いたのですが、キー順で表示されずです。。 (macOSMojave Chrome88)
Lhankor_Mhy

2021/03/30 08:11

失礼しました、質問を誤読しておりました。
guest

回答4

0

オブジェクトのキー順に表示をさせたいです。

キーの順番は、

  • ES5以下→保証されない(どんな順番になっても文句は言えない)
  • ES6以降→整数であれば数字順に整列される(入れた順には決してならない)

ということで、この場合には「確実に入れたときの順番のまま保持する」方法はありません。配列もしくはMapで管理する必要があります。

投稿2021/03/30 08:06

編集2021/03/30 08:09
maisumakun

総合スコア145975

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

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

maisumakun

2021/03/30 08:18 編集

ES6のキー順で処理がなされない古いブラウザを無視できるのであれば、キーへ「*0」のように余計なものを付けるなどして、整数としてのソートを避ける、という手段は考えられます。
naka0512

2021/03/30 08:19

なるほど、やはりMapや配列になりますでしょうか、、 ご回答ありがとうございます。
naka0512

2021/03/30 08:22

なるほど、ソートの条件に合わせて、キーを変更する手段がありますよね。 列挙順に出来ない場合は、検討してみます。ありがとうございます。
guest

0

ベストアンサー

通常のObjectはイテラブルではないため任意の順番で引き出すことは出来ません
ご自身でも指摘されている通りMapや配列などを利用することをおすすめします

投稿2021/03/30 07:02

yambejp

総合スコア116694

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

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

naka0512

2021/03/30 08:17

やはりMapや配列になりますでしょうか、、 すみません、ご回答ありがとうございます。
guest

0

ES6以降が動作する標準的なブラウザであれば、連番で並ぶはずです。試してないけど、Node.jsもそのはず。

文字列キーの内、0 以上の整数に解釈可能なキーが整数昇順で並ぶ

ES6 以降は JavaScript のプロパティに順序は「ある」 - Qiita

Firefox87 Chrome89 Edge89 で確認しました。
キーを数値化するので、↓これでも連番になると思います。

js

1const object = { 2 '1000': 'テスト1', 3 0: 'テスト2', 4 1001: 'テスト3' 5};

投稿2021/03/30 08:02

Lhankor_Mhy

総合スコア36946

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

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

Lhankor_Mhy

2021/03/30 08:06

ああ、誤読してました。キー順っていうのは、キーの登録順のことでしたか……
naka0512

2021/03/30 08:18

こちら分かりづらい記述をしてしまい申し訳ありません。。 はい、キーの登録順で表示させたいです。
guest

0

キーでソートしてから表示すればいいと思います。

javascript

1for (const [key, value] of Object.entries(object).sort(([k1,v1],[k2,v2])=>Number(k1)-Number(k2))) { 2 console.log(`${key}: ${value}`); 3}

投稿2021/03/30 07:01

ku__ra__ge

総合スコア4524

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

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

naka0512

2021/03/30 08:16

ご回答ありがとうございます。 ご回答を参考にコードを修正して実行してみましたが、連番で表示されてしまって、、他のブラウザでも見てみます。 実行結果 > "0: テスト2" > "1000: テスト1" > "1001: テスト3"
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問