次のような JavaScript の json オブジェクトを取得しました。
var json = {"20121207":"13", "20121211":"9", "20121213":"7", "20121219":"4"};
最後のキーの名前を知らなくても。(キーは昇順です)
最後の要素の値 (およびキー) を読み取るにはどうすればよいですか?
次のような JavaScript の json オブジェクトを取得しました。
var json = {"20121207":"13", "20121211":"9", "20121213":"7", "20121219":"4"};
最後のキーの名前を知らなくても。(キーは昇順です)
最後の要素の値 (およびキー) を読み取るにはどうすればよいですか?
var highest = json[ Object.keys(json).sort().pop() ];
Object.keys
(ES5、shimmable) オブジェクトのキーの配列を返します。次に、それらを並べ替えて、最後のものを取得します。
for..in
ループ内の順序を保証することはできないため、完全に信頼することはできません。しかし、あなたが言ったように、キーは昇順であるため、単純に並べ替えることができます。
これを試して:
var lastKey;
var json = {"20121207":"13", "20121211":"9", "20121213":"7", "20121219":"4"};
for(var key in json){
if(json.hasOwnProperty(key)){
lastKey = key;
}
}
alert(lastKey + ': ' + json[lastKey]);
古い JS エンジンをサポートする必要がない場合:
var lastKey = Object.keys(json).sort().reverse()[0];
var lastValue = json[lastKey];
キーが整っていると思い込まないでください。キーを取得して並べ替え、並べ替え後に最大値を取得します。
通常、オブジェクト キーは順序付けされていませんが、使用しているキーセットを見て、json キーで最も高い日付を探していると仮定しました。
var json = {"20121207":"13", "20121211":"9", "20121213":"7", "20121219":"4"};
function getMaxFromKeys(json) {
var m;
for (var i in json) {
if (json.hasOwnProperty(i)) {
m = (typeof m == 'undefined' || i > m) ? i : m;
}
}
return m;
}
var latestDate = getMaxFromKeys(json);
ECMCA スクリプト仕様 (javascript 仕様) では、ブラウザーがオブジェクトのプロパティの順序を維持する必要はありません。
for-in に関連して、これは ECMCA 5 仕様が言うことです:
「プロパティを列挙するメカニズムと順序 (最初のアルゴリズムのステップ 6.a、2 番目のステップ 7.a) は指定されていません。」
Object.keys メソッドに関連するもの:
「実装が for-in ステートメントの列挙の特定の順序を定義する場合、このアルゴリズムのステップ 5 で同じ列挙順序を使用する必要があります。」
最後に定義されたプロパティを取得すると言うのは意味がありません。名前に基づいてプロパティを並べ替えて最後のものを取得できますが、順序が必要な場合は配列を保持してください。
let obj = <your_object>
let last_key = Object.keys(obj)[Object.keys(obj).length - 1]
let last_value = <your_object>.last_key
また
let last_value = Object.values(obj)[Object.values(obj).length - 1]