【问题标题】:JSON Object return values based on position基于位置的 JSON 对象返回值
【发布时间】:2014-08-04 22:01:35
【问题描述】:

我有一个 JSON 对象

var obj = {"firstName":"John", "lastName":"Doe"}

我可以使用obj.firstName 等返回值。但就我而言,我可能不知道标题的名称,但我知道它的位置。有没有办法可以使用它的位置返回值?例如obj.1

【问题讨论】:

  • JavaScript 对象没有顺序。
  • 运行 for/in 循环并将值分配给数组。问题是某些浏览器会按名称按字母顺序排列对象属性,因此您可能无法获得一致的结果。
  • @PHPglue 尽管 ECMAscript 明确定义了无顺序,但许多浏览器确实使用了诸如“插入顺序”之类的顺序。不过,我从来没有听说过按字母顺序做的。
  • 在 Firebug 中查看时,我的对象几乎从来都不是我制作它们的顺序。
  • 您可能是一名 PHP 程序员,其中键/值数组也有数字索引?

标签: javascript arrays json object


【解决方案1】:

我假设你会想到 Object.keys()for..in 循环

你不能依赖它的位置,因为根据浏览器的实现,对象键是按字典顺序排序的,或者不是,ecma5 不强制这样做。

【讨论】:

  • 这就是理解 - ES5明确指出对象是键/值对的无序集合。因此,您碰巧得到的任何订单都是实施问题。
【解决方案2】:

JSON 没有索引,你可以创建一个索引数组:

var indexes = []
for(var key in obj) {
  indexes.push(key);
}

然后使用这些密钥访问 JSON 元素,注意 for...in 以随机顺序返回密钥。

【讨论】:

  • "然后使用这些键" ...以任意随机顺序 for ... in ... 将它们放在那里...
  • 我从 "JSON 没有索引" 开始回答,也许我写的之后给出的想法是它有一些排序?
  • 您的回答仍然会给 OP 留下这样的印象,即元素将以某种确定的顺序最终出现在数组中。
  • 那么基本上没有办法做到吗?
  • Alnitak 的评论非常有用:“ES5 明确指出一个对象是一组无序的键/值对”并且 aduch 也回答:“对象键是按字典顺序排序或不排序,ecma5 不会强制执行任何一种方式。”,所以不,这是不可能的。
【解决方案3】:

这里的答案很好:

https://stackoverflow.com/a/11509718/1443478

var obj = { first: 'someVal' };
obj[Object.keys(obj)[0]]; //returns 'someVal'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-13
    • 2020-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    • 2020-05-14
    • 1970-01-01
    相关资源
    最近更新 更多