Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取JavaScript中JSON对象的最后一个元素_Javascript_Json - Fatal编程技术网

获取JavaScript中JSON对象的最后一个元素

获取JavaScript中JSON对象的最后一个元素,javascript,json,Javascript,Json,我在JavaScript中得到了一个json对象,如: var json = {"20121207":"13", "20121211":"9", "20121213":"7", "20121219":"4"}; 不知道最后一个键的名称。(按键按升序排列) 如何读取最后一个元素的值(和键)?尝试以下操作: var lastKey; var

我在JavaScript中得到了一个json对象,如:

var json = {"20121207":"13", "20121211":"9", "20121213":"7", "20121219":"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]);
Object.keys
(ES5,可填充)返回对象键的数组。然后我们对它们进行分类,并抓取最后一个


您无法确保在<代码>循环中为..排序,因此我们不能完全依赖于此。但正如您所说的,密钥是按升序排列的,我们可以简单地对它们进行排序。

如果您不需要支持旧的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规范)不要求浏览器维护对象属性的顺序

ECMCA 5规范中与for相关的内容如下:

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

与Object.keys方法相关:

“如果实现为 对于in语句,在步骤5中必须使用相同的枚举顺序 这是一种算法。”


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

有比
o(N)
更好的解决方案吗?记住过滤您正在迭代的属性。他不能将其转换为JavaScript数组然后处理它吗!!这是等价的:
Object.keys(json)[json.length-1]键是按升序排列的,所以我认为排序是不必要的。如果它们不是在某个API更改之后发生的呢?我已经调试了足够多的东西,在最初的代码编写完成后的几个月内,这些东西都会让我感到厌烦。除非性能是一个主要问题,否则这样做是值得的。我当然理解API的变化,只是好奇在这个时候是否有必要。是的,一盎司的预防抵得上一磅的治疗。我认为不能保证这些解决方案中的任何一种都能奏效。大多数浏览器可能会保证属性的顺序,但我不认为ECMCA规范要求维护顺序。可以进行广泛的研究。排序不是没有必要吗?@Woot4Moo为什么没有必要?OP没有说他的键是按升序排列的,这意味着升序是OP想要的顺序,至少对我来说是这样。@Woot4Moo
Object.keys
以相同的顺序返回键。正如回答中所说,我们不能相信会有人订购。未捕获引用错误:obj没有定义这是最安全的;在我的情况下,我不能绝对肯定最后一个键是最高的(尽管最初设计是这样的)
let obj = <your_object>
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]