如果我有一个像这样的对象:
{ 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' }
如果我事先不知道列表会升至'c',而不是遍历对象,是否有办法获取对象中的最后一项(例如'carrot'
)?
如果我有一个像这样的对象:
{ 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' }
如果我事先不知道列表会升至'c',而不是遍历对象,是否有办法获取对象中的最后一项(例如'carrot'
)?
Answers:
不能。在JSON和大多数其他键值数据结构中不能保证顺序,因此,最后一项有时可能是,carrot
而在其他时候是banana
等等。如果您需要依赖排序,那么最好的选择就是使用数组。键值数据结构的功能在于按其访问值keys
,而不在于能够获取nth
对象的项。
[]
它实际上也是一个对象。JS没有这样的关联数组,数组具有索引访问和序列;对象具有关联属性访问,非顺序访问。
是的,有一种使用的方法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"
Object.keys
效果很棒。只是必须找到一种使其在IE8和7上运行的方法,因为这仅在IE9上显示。
var myObj = {a: 1, b: 2, c: 3}, lastProperty;
for (lastProperty in myObj);
lastProperty;
//"c";
for (firstProperty in myObj) { break; };
至于对象属性在Javascript中的排序,我将链接到以下答案:
特别:
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'
JavaScript中的Map对象 。现在已经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'