如何获取 JavaScript 对象中的最后一项?

问题描述 投票:0回答:15

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

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

如果我事先不知道列表会到达“c”,除了循环遍历对象之外,是否有办法获取对象中的最后一项(例如

'carrot'
)?

javascript object
15个回答
283
投票

是的,有一种方法使用

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"

78
投票

不。 JSON 和大多数其他键值数据结构无法保证顺序,因此最后一项有时可能是

carrot
,有时可能是
banana
,依此类推。如果您需要依赖排序,那么最好的选择是使用数组。键值数据结构的强大之处在于通过其
keys
访问值,而不是能够获取对象的
nth
项。


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

其中 obj 是你的对象


20
投票

Answer 已被原作者删除,以抗议 Stackoverflow 将其用户出卖给 OpenAI。


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

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


11
投票

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

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


8
投票

你可以试试这个。这将存储最后一个项目。这里需要将obj转换为数组。然后使用数组

pop()
函数将从转换后的数组中返回最后一项。

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


5
投票

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

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

具体:

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

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

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

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

因此,你的问题的答案是,除了循环对象之外没有其他办法。


5
投票

如果顺序很重要,请使用数组,而不是对象文字。

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
的钥匙是有序的。


3
投票
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'

3
投票

您也可以使用

Object.values()
方法:

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

编辑

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

const fruitValues = Object.values(fruitObject);

送给你:

fruitValues[fruitValues.length - 1];


3
投票
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


0
投票

JavaScript 中的映射对象 。现在已经有3年左右的历史了。此地图数据结构保留项目插入的顺序。这样,检索最后一个项目实际上会导致最新的项目插入到地图中


0
投票

obj
成为你的对象。执行:

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

0
投票

如果您的意思是按字母顺序获取最后一个密钥,您可以(保证):

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'
© www.soinside.com 2019 - 2024. All rights reserved.