【问题标题】:Getting first JSON property获取第一个 JSON 属性
【发布时间】:2010-11-10 03:26:59
【问题描述】:

有没有办法获取 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;
    ...
}

但是有些“感觉”很丑......所以这基本上只是一个优雅的问题。

【问题讨论】:

标签: javascript json


【解决方案1】:
console.log(jsonObj[Object.keys(jsonObj)[0]]);

【讨论】:

  • 最好写一个简短的解释,说明为什么这是答案,以及为什么你的答案比其他人更好。
  • 据我了解, Object.keys(jsonObj) 将创建一个可以使用 [] 表示法访问的对象键数组。 [0] 是数组中的第一项。将其添加为 jsonObject 的键查找(在其自己的方括号内)本质上是这样说的; “制作对象中所有键的数组,给我其中的第一个,现在在原始对象中查找该键的值”。
  • 我其实更喜欢这个
【解决方案2】:

使用 jQuery 时,您还可以使用 $.each 来迭代 JSON 对象。 IMO 看起来比使用 for-loop 更干净

var items = {
    'item1': 'content',
    'item2': 'content',
    'item3': 'content'
}

$.each(items, function() { 
    console.log($(this)[0])
})

【讨论】:

    【解决方案3】:

    对象属性的顺序保证与您放入它们的方式相同。然而,实际上,所有主要浏览器都会按顺序返回它们。所以如果你可以依赖这个......

    var firstProp;
    for(var key in jsonObj) {
        if(jsonObj.hasOwnProperty(key)) {
            firstProp = jsonObj[key];
            break;
        }
    }
    

    另请注意,有一个关于订购的bug in Chrome,在某些极端情况下,它不会按照提供的方式订购。就未来的变化而言,机会实际上很小,因为我相信这正在成为标准的一部分,所以如果有任何支持,只会成为官方的。

    但是,如果您真的、真的、绝对、肯定地想确保它的顺序正确,那么您需要使用数组。否则,上面的就可以了。

    相关问题:Elements order - for (… in …) loop in javascript

    【讨论】:

    • 但是如果将来发生变化怎么办?
    • 请注意,对象属性枚举顺序并未纳入 ECMAScript 5 规范,Chrome 的行为一直保持不变,现在其他浏览器也纷纷效仿,所以 @the_drow 的担忧是好的-成立。
    • 请注意,数组是这个规则的一个常见例外,因为它总是按数字顺序迭代。最好的合规解决方案是只使用 Map 或 Set,它们在任何情况下都有保证的顺序。
    【解决方案4】:

    没有“第一”属性。对象的属性是无序的。

    您可以通过循环获取 JS 引擎决定首先提供的任何内容。

    function maybe_first_in_object(ob) {
        for (var props in ob) {
            return prop;
        }
    }
    

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

    【讨论】:

    • 好点是不能保证它们是你指定它们的顺序——赞成。不过,我会确保检查 hasOwnProperty()。
    【解决方案5】:

    很好的问题。除了在 for-in 循环中迭代之外,我不知道任何方法。你只需要迭代一次。为了安全起见,请确保它是已知属性 [more info]。

    for (var propName in jsonObj) {
        if (jsonObj.hasOwnProperty(propName)) {
            return propName;    // or do something with it and break
        }
    }
    

    编辑更清楚地表明您正在迭代属性名称,而不是它们的值。

    【讨论】:

      猜你喜欢
      • 2021-09-02
      • 1970-01-01
      • 1970-01-01
      • 2015-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-04
      相关资源
      最近更新 更多