如果我有一个像这样的对象:
{ 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' }
如果我事先不知道列表会到达“c”,除了循环遍历对象之外,是否有办法获取对象中的最后一项(例如
'carrot'
)?
是的,有一种方法使用
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"
不。 JSON 和大多数其他键值数据结构无法保证顺序,因此最后一项有时可能是
carrot
,有时可能是 banana
,依此类推。如果您需要依赖排序,那么最好的选择是使用数组。键值数据结构的强大之处在于通过其 keys
访问值,而不是能够获取对象的 nth
项。
last = Object.keys(obj)[Object.keys(obj).length-1];
其中 obj 是你的对象
Answer 已被原作者删除,以抗议 Stackoverflow 将其用户出卖给 OpenAI。
var myObj = {a: 1, b: 2, c: 3}, lastProperty;
for (lastProperty in myObj);
lastProperty;
//"c";
使用ES6解构赋值语法的解决方案:
var temp = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' };
var { [Object.keys(temp).pop()]: lastItem } = temp;
console.info(lastItem); //"carrot"
你可以试试这个。这将存储最后一个项目。这里需要将obj转换为数组。然后使用数组
pop()
函数将从转换后的数组中返回最后一项。
var obj = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' };
var last = Object.keys(obj).pop();
console.log(last);
console.log(obj[last]);
至于Javascript中对象属性的排序,我将链接到这个答案:
具体:
所有现代实现 ECMAScript 迭代对象 属性按照它们的顺序 被定义
所以这里的所有其他答案都是正确的,没有官方保证的对象属性顺序。然而在实践中是存在的(除非任何错误自然会搞砸甚至官方指定的一成不变的行为)。
此外,对象属性的实际枚举顺序可能会在未来的 EMCAScript 规范中进行编码。
不过,此时我不会围绕此编写代码,主要是因为没有内置工具来帮助处理对象属性顺序。您可以编写自己的属性,但最终您总是会循环遍历对象中的每个属性以确定其位置。
因此,你的问题的答案是否,除了循环对象之外没有其他办法。
如果顺序很重要,请使用数组,而不是对象文字。
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
的钥匙是有序的。
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'
您也可以使用
Object.values()
方法:
Object.values(fruitObject)[Object.values(fruitObject).length - 1]; // "carrot"
编辑
为了提高性能,您可以创建一个变量:
const fruitValues = Object.values(fruitObject);
送给你:
fruitValues[fruitValues.length - 1];
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
JavaScript 中的映射对象 。现在已经有3年左右的历史了。此地图数据结构保留项目插入的顺序。这样,检索最后一个项目实际上会导致最新的项目插入到地图中
让
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'