13

我在 JavaScript 中有一个 json 对象,例如:

var json = {"20121207":"13", "20121211":"9", "20121213":"7", "20121219":"4"};

不知道最后一个键的名称。(按键按升序排列)

如何读取最后一个元素的值(和键)?

4

6 回答 6

19
var highest = json[ Object.keys(json).sort().pop() ];

Object.keys(ES5, shimmable) 返回对象键的数组。然后我们对它们进行排序并抓住最后一个。

您无法确保for..in循环中的顺序,因此我们不能完全依赖它。但是正如您所说,键是按升序排列的,我们可以简单地对它们进行排序。

于 2013-01-03T22:14:19.377 回答
4

试试这个:

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]);
于 2013-01-03T22:11:27.557 回答
2

如果你不需要支持旧的 JS 引擎:

var lastKey = Object.keys(json).sort().reverse()[0];
var lastValue = json[lastKey];

不要假设钥匙是有序的。获取键,然后对它们进行排序,然后在排序后获取最大值。

于 2013-01-03T22:14:59.630 回答
1

对象键通常是无序的,但是查看您正在使用的键集,我假设您正在寻找 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);
于 2013-01-03T22:16:45.863 回答
1

ECMCA 脚本规范(javascript 规范)不要求浏览器维护对象属性的顺序。

与 for-in 相关的是 ECMCA 5 规范所说的:

“枚举属性的机制和顺序(第一个算法中的步骤 6.a,第二个算法中的步骤 7.a)没有指定。”

与 Object.keys 方法相关:

“如果实现为 for-in 语句定义了特定的枚举顺序,则在该算法的第 5 步中必须使用相同的枚举顺序。”

说获取最后定义的属性是没有意义的。您可以根据名称对属性进行排序并获取最后一个,但如果您想要的是顺序,则保留一个数组。

于 2013-01-03T22:27:05.073 回答
0
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]
于 2020-02-03T09:33:34.097 回答