获取JavaScript对象中的最后一个项目

如果我有一个像这样的对象:

{ 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' } 

如果事先不知道列表是否变成了'c',除了循环对象外,是否有办法获得对象中的最后一项(例如'carrot' )?

在JSON和大多数其他键值数据结构中,不能保证顺序,所以最后的项目有时可以是carrot ,有时候是banana等等。 如果你需要依靠订购,最好的select就是使用数组。 键值数据结构的威力在于通过keys访问值,而不是获取对象的nth项。

是的,有一种使用Object.keys(obj) 。 这是在这个页面解释:

 var fruitObject = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' }; Object.keys(fruitObject); // this returns all properties in an array ["a", "b", "c"] 

如果你想得到最后一个对象的值,你可以这样做:

 fruitObject[Object.keys(fruitObject)[Object.keys(fruitObject).length - 1]] // "carrot" 
 var myObj = {a: 1, b: 2, c: 3}, lastProperty; for (lastProperty in myObj); lastProperty; //"c"; 

来源: http : //javascriptweblog.wordpress.com

last = Object.keys(obj)[Object.keys(obj).length-1];

obj是你的对象

如果订单很重要,请使用数组,而不是对象字面值。

 list = ['apple', 'banana', 'carrot']; 

或者类似的东西

 dict = { 'a' : ['apple', 'awesome'], 'b' : ['best friend'] }; 

甚至..

 dict = [{letter:'a', list:['apple', 'awesome']},{letter:'b', list:['best friend']}]; 

dict的关键是不能保证按顺序。

至于在Javascript中的对象属性的sorting,我只会链接到这个答案:

元素顺序在“for(… in …)”循环中

特别:

ECMAScript的所有现代实现都按照它们被定义的顺序遍历对象属性

所以这里的其他答案是正确的,没有官方的保证命令来反对性质。 然而在实践中(除了任何自然可以搞砸甚至是正式指定行为的错误)。

此外,对象属性事实上的枚举顺序可能会在未来的EMCAScript规范中被编码。

不过,在这个时候我不会写代码,主要是因为没有内置的工具来帮助处理对象的属性顺序。 你可以写自己的,但最后你总是循环对象中的每个属性来确定它的位置。

因此你的问题的答案是否定的 ,除了循环一个对象之外没有办法。

 JSArray = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' }; document.write(Object.keys(JSArray)[Object.keys(JSArray).length-1]);// writes 'c' document.write(JSArray[Object.keys(JSArray)[Object.keys(JSArray).length-1]]); // writes 'carrot' 

使用ES6的解构赋值语法的解决scheme:

 var temp = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' }; var { [Object.keys(temp).pop()]: lastItem } = temp; console.info(lastItem); //"carrot" 

在JavaScript中映射对象 。 现在已经3岁左右了。 该地图数据结构保留项目插入的顺序。 通过这个检索,最后一个项目实际上会导致在Map中插入最新的项目