我在 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,第二个算法中的步骤 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]