获取 javascript 对象中的最后一项

如果我有这样一个物体:

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

如果我事先不知道列表上升到‘ c’,除了循环遍历对象,有没有办法得到对象中的最后一项(例如 'carrot') ?

186909 次浏览

没有。在 JSON 和大多数其他键值数据结构中不能保证顺序,因此最后一项有时可以是 carrot,有时可以是 banana,以此类推。如果 需要依赖于排序,那么最好的选择是使用数组。键值数据结构的强大之处在于通过它们的 keys访问值,而不在于能够获取对象的 nth项。

Use an array, not an object literal, if order matters.

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

或者类似的东西

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

甚至..。

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

dict的键根本不能保证是有序的。

至于 Javascript 中对象属性的顺序,我将只链接到这个答案:

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

具体来说:

所有现代的 ECMAScript 遍历对象 属性的顺序 被定义为

所以这里的其他答案都是正确的,对象属性没有正式的保证顺序。然而,在实践中有(排除任何错误,自然可以搞砸甚至一成不变的官方指定的行为)。

Furthermore, the de-facto enumeration order of object properties is likely to be codified in future EMCAScript specs.

尽管如此,在这个时候,我不会围绕这个问题编写代码,主要是因为没有内置的工具来帮助处理对象属性顺序。您可以编写自己的属性,但最终总是要循环遍历对象中的每个属性以确定其位置。

因为您的问题的答案是 没有,所以除了循环遍历对象之外没有其他方法。

var myObj = {a: 1, b: 2, c: 3}, lastProperty;
for (lastProperty in myObj);
lastProperty;
//"c";

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

是的,有一种使用 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"
last = Object.keys(obj)[Object.keys(obj).length-1];

你的目标是什么

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'

在 JavaScript 中映射对象 .这已经有3年了。此映射数据结构保留项插入的顺序。使用这个检索最后一项实际上将导致在 Map 中插入最新项

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

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

You could also use the Object.values() method:

Object.values(fruitObject)[Object.values(fruitObject).length - 1]; // "carrot"

剪辑

为了提高性能,您可以创建一个变量:

const fruitValues = Object.values(fruitObject);

给你:

fruitValues[fruitValues.length - 1];

obj成为你的对象。执行:

(_ => _[Object.keys(_).pop()])( obj )

如果你的意思是按字母顺序得到最后一个键,你可以(保证) :

var obj = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' };
var keys = Object.keys(obj);
keys.sort();
var lastkey = keys.pop() // c
var lastvalue = obj[lastkey] // 'carrot'

你可以试试这个。这将存储最后一项。这里需要将 obj 转换为数组。然后使用数组 pop()函数,该函数将从转换后的数组返回最后一项。

var obj = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' };
var last = Object.keys(obj).pop();
console.log(last);
console.log(obj[last]);

其他的答案对我来说过于复杂了。

let animals = {
a: 'dog',
b: 'cat',
c: 'bird'
}


let lastKey = Object.keys(animals).pop()
let lastValue = animals[Object.keys(animals).pop()]
const fruitObject = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' };
const lastValue = Object.values(fruitObject).slice(-1)[0];

这条路似乎很短。

Https://developer.mozilla.org/de/docs/web/javascript/reference/global_objects/object/values Https://developer.mozilla.org/de/docs/web/javascript/reference/global_objects/array/slice