spr*_*man 81 javascript object
如果我有一个像这样的对象:
{ 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' }
Run Code Online (Sandbox Code Playgroud)
如果我事先不知道列表上升到'c',除了遍历对象之外,有没有办法获取对象中的最后一项(例如'carrot'
)?
小智 194
是的,有一种方法可以使用Object.keys(obj)
.本页对此进行了解释:
var fruitObject = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' };
Object.keys(fruitObject); // this returns all properties in an array ["a", "b", "c"]
Run Code Online (Sandbox Code Playgroud)
如果要获取最后一个对象的值,可以这样做:
fruitObject[Object.keys(fruitObject).length-1] // "carrot"
Run Code Online (Sandbox Code Playgroud)
Ale*_*lex 59
否.在JSON和大多数其他键值数据结构中不保证顺序,因此最后一项有时可能carrot
在其他时间,有时banana
也是等等.如果您需要依赖订购,最好的选择是使用数组.键值数据结构的强大之处在于通过它们访问值keys
,而不是能够获取nth
对象的项目.
小智 18
last = Object.keys(obj)[Object.keys(obj).length-1];
Run Code Online (Sandbox Code Playgroud)
obj是你的对象
小智 13
var myObj = {a: 1, b: 2, c: 3}, lastProperty;
for (lastProperty in myObj);
lastProperty;
//"c";
Run Code Online (Sandbox Code Playgroud)
来源:http://javascriptweblog.wordpress.com
Bri*_*ian 12
其他答案对我来说过于复杂。
let animals = {
a: 'dog',
b: 'cat',
c: 'bird'
}
let lastKey = Object.keys(animals).pop()
let lastValue = animals[Object.keys(animals).pop()]
Run Code Online (Sandbox Code Playgroud)
使用ES6的解构赋值语法的解决方案:
var temp = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' };
var { [Object.keys(temp).pop()]: lastItem } = temp;
console.info(lastItem); //"carrot"
Run Code Online (Sandbox Code Playgroud)
你可以试试这个。这将存储最后一个项目。这里需要将 obj 转换为数组。然后使用数组pop()
函数从转换后的数组中返回最后一项。
var obj = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' };
var last = Object.keys(obj).pop();
console.log(last);
console.log(obj[last]);
Run Code Online (Sandbox Code Playgroud)
如果订单很重要,请使用数组,而不是对象文字.
list = ['apple', 'banana', 'carrot'];
Run Code Online (Sandbox Code Playgroud)
或类似的东西
dict = {
'a' : ['apple', 'awesome'],
'b' : ['best friend']
};
Run Code Online (Sandbox Code Playgroud)
甚至..
dict = [{letter:'a', list:['apple', 'awesome']},{letter:'b', list:['best friend']}];
Run Code Online (Sandbox Code Playgroud)
dict
根本不保证钥匙的顺序.
至于Javascript中对象属性的排序,我将链接到这个答案:
特别:
ECMAScript的所有现代实现都按照定义它们的顺序迭代对象属性
所以这里的每个其他答案都是正确的,没有官方保证订单来反对属性.然而,在实践中存在(除非任何错误自然会搞砸甚至一塌糊涂的官方指定行为).
此外,对象属性的事实上的枚举顺序很可能在未来的EMCAScript规范中编纂.
但是,此时我不会围绕此编写代码,主要是因为没有内置工具来帮助处理对象属性顺序.你可以编写自己的,但最后你总是循环遍历一个对象中的每个属性来确定它的位置.
这样的回答你的问题是没有,有除了通过对象循环没有办法.
归档时间: |
|
查看次数: |
101803 次 |
最近记录: |