質問: [ {a: "あ", b: 1}, {a: "い", b: 2} ]; hoge.sort(function(value1, value2) { return value2.b - value1.b; }); ```
回答: > > ・下記は、そもそも配列をソートしているだけなので、オブジェクトの順序とは無関係?? > > > そう思います。配列を`各要素.b`でソートしているだけです。 > > 仕様ではキーの順序を保証しなかったと思うのですが、値だとどうなるのですか? > > > 上記の意味があまり理解できていませんが、 オブジェクトのキー一覧やオブジェクトの値一覧は以下のように取得でき、 MDNによると、いずれも`for...in` ループによる順序と同じで、順不同(注)となるようです。 ``` Object.keys(hoge[0]) //=> [ 'a', 'b' ] Object.values(hoge[0]) //=> [ 'い', 2 ] ``` ### 注) 順不同について Javascriptにおけるオブジェクトの順序に検証された記事があります。 JavaScriptのエンジンにより挙動が違うようです。詳細は前述の記事などを参照ください。 以下はnodejs(v9.3.0)での実行例です。 ``` obj = {a: "あ", b: 1} console.log(Object.keys(obj)) //=> ['a', 'b'] obj.d = 2 obj.c = 3 console.log(Object.keys(obj)) //=> [ 'a', 'b', 'd', 'c' ] obj[2] = "a" obj[1] = "b" console.log(Object.keys(obj)) //=> [ '1', '2', 'a', 'b', 'd', 'c' ] ```