有没有办法获取JSON对象的第一个属性的名称?
我想做这样的事情:
var firstProp = jsonObj[0];
编辑:我正在获取一个JSON对象,其中包含带有图片网址的数组类别。
像这样:{
"category1":["image/url/1.jpg","image/url/2.jpg"],
"category2":["image/url/3.jpg","image/url/4.jpg"]
}
然后我遍历对象以插入图像,而我真正想要的只是一种优雅的方式来查看首先插入的类别。起初我刚刚做了
for (var cat in images) {
if (i==0) firstCat = cat;
...
}
但有些人觉得“觉得”难看......所以这基本上只是一个优雅的问题:p
答案 0 :(得分:33)
对象属性的顺序不是保证与放入它们的方式相同。但实际上,所有主流浏览器都会按顺序返回它们。所以,如果你依赖这个就好......
var firstProp;
for(var key in jsonObj) {
if(jsonObj.hasOwnProperty(key)) {
firstProp = jsonObj[key];
break;
}
}
另请注意,有关排序的bug in Chrome,在某些边缘情况下,它不会按照提供的方式对其进行排序。就未来的变化而言,实际上这个机会实际上很小,因为我相信这已经成为标准的一部分,所以如果对此有任何支持只会成为正式的。
但是,考虑到所有事情,如果你真的,非常,绝对,积极地想要确定它将以正确的顺序使用数组。否则,上面的情况很好。
答案 1 :(得分:24)
console.log(jsonObj[Object.keys(jsonObj)[0]]);
答案 2 :(得分:14)
没有“第一”财产。对象的属性是无序的。
你可以获得JS引擎决定首先提供循环的任何内容。
function maybe_first_in_object(ob) {
for (var props in ob) {
return prop;
}
}
...但如果订单很重要,请使用数组而不是对象。
答案 3 :(得分:2)
好问题。除了在for-in循环中迭代之外,我不知道任何方式。你只需要迭代一次。为安全起见,请确保它是已知属性[more info]。
for (var propName in jsonObj) {
if (jsonObj.hasOwnProperty(propName)) {
return propName; // or do something with it and break
}
}
已编辑,要明确表示您正在迭代属性名称,而不是其值。
答案 4 :(得分:1)
使用jQuery时,您还可以使用$.each
迭代JSON对象。看起来比使用for
- 循环
var items = {
'item1': 'content',
'item2': 'content',
'item3': 'content'
}
$.each(items, function() {
console.log($(this)[0])
})