【问题标题】:Can't select first value in json object [duplicate]无法选择 json 对象中的第一个值 [重复]
【发布时间】:2016-11-01 13:56:43
【问题描述】:

我似乎无法选择 json 对象中的第一个值。
我试过array[0][0],但它返回undefined

[ { 'Room 1': 11017,
'Room 2': 2651,
'Room 3': 1,
'Room 4': 2,
'Room 5': 1,
'Room 6': 1,
'Room 7': 3,
'Room 8': 5,
'Room 9': 3661,
'Room 10': 2 } ]

【问题讨论】:

  • 因为对象中没有0这样的key..试试array[0]['Room 1']
  • 没有任何保证没有“第一”价值。如果需要正确的顺序,使用Object.keys() 的解决方案是不安全的。

标签: javascript arrays json


【解决方案1】:

由于元素是一个对象,它试图检索属性0,即undefined。所以需要使用属性名来获取值(例如:array[0]['Room 1'])。


您可以使用 Object.keys() 获取键数组,然后使用它获取值。但是不能保证顺序,因为 Object.keys() 以任意顺序返回键。

var array = [{
  'Room 1': 11017,
  'Room 2': 2651,
  'Room 3': 1,
  'Room 4': 2,
  'Room 5': 1,
  'Room 6': 1,
  'Room 7': 3,
  'Room 8': 5,
  'Room 9': 3661,
  'Room 10': 2
}]

console.log(
  array[0][Object.keys(array[0])[0]]
);

更新:如果您想按特定顺序获取它,请改用嵌套数组。

var array = [[
  11017,
  2651,
  1,
   2,
   1,
   1,
   3,
   5,
   3661,
   2
]]

console.log(
  array[0][0]
);

【讨论】:

  • 请记住 - 如果您尝试访问的项目需要按特定顺序排列,则对象不会保持顺序。如果顺序很重要,则每个键值都应该在它们自己的数组索引中。
  • Object.keys 以任意顺序返回键
  • @Arunesh : 很高兴帮助你:)
  • @Arunesh:不能保证[0] 将代表Room 1 键/值对,所以你不应该使用这个解决方案,因为它可以在没有警告的情况下产生任何它想要的顺序。
【解决方案2】:

这是因为它是数组中的一个对象。您可以使用array[0] 访问数组的元素,但对于对象,它必须是object.keyobject["key"]

为了使这个数据结构更加动态,我建议像这样分解它:

roomNumbers = [11017, 2651, 1, 2, 1]...(and so on)

这样,您就可以在不知道房间的情况下访问一个号码。

【讨论】:

    【解决方案3】:

    您需要使用字符串而不是索引来访问键:

    array[0]['Room 1']

    编辑: 有一种方法可以根据定义顺序访问密钥。然而,虽然Object.keys 的几乎所有实现目前都以正确的顺序返回,但规范并不要求这样做:

    var keys = Object.keys( array[0] );
    var fifth = keys[4];
    var value = array[0][fifth];
    

    【讨论】:

    • 进行了编辑,展示了它是如何工作的。
    • 你们真的不应该发布可能失败的东西。初学者最终会使用具有外观的解决方案,而无需注意警告。
    【解决方案4】:

    你有一个数组,包含 1 个对象,它有键而不是索引。所以参考第一个键:

    array[0]['Room 1']
    

    如果需要在不知道键名的情况下拉取,可以通过Object.keys(obj)获取;

    var availableKeys = Object.keys(array[0]);
    var val = array[0][availableKeys[0]]; //replace availableKeys index with what you need
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-04
      • 2014-08-26
      • 1970-01-01
      • 1970-01-01
      • 2016-06-30
      • 2015-07-15
      • 2021-05-27
      • 2019-12-17
      相关资源
      最近更新 更多