从Key获取JSON值

时间:2013-11-18 19:15:57

标签: javascript arrays json undefined

为什么未定义会被记录?

var arr = [{"eat" : 0}, {"sleep" : 1}, {"code" : 2}];
var key = "eat";
console.log(arr[key]);

我希望在日志中看到0

http://jsfiddle.net/jFFW5/

4 个答案:

答案 0 :(得分:5)

首先,我在这里看不到任何JSON。我看到一个普通的JavaScript数组对象--JSON是一种数据序列化格式。

其次,您可能正在寻找会返回arr[0]的{​​{1}}。

数组用于存储顺序数据。

或者,如果符合您的实际需要,您可以将它们存储在对象中:

{"eat": 0}

注意:在更现代的实现中 - 您应该使用Map而不是数组。或者使用var arr = {"eat" : 0,"sleep" : 1,"code" : 2}; var key = "eat"; console.log(arr[key]);

答案 1 :(得分:2)

你有一个包含三个属性的数组。他们的名字是“0”,“1”和“2”。这些名称是从数组文字中列出的三个值(三个对象文字)的事实中隐式得出的。

为了在数组中找到属性为“eat”的条目,你必须遍历数组。

答案 2 :(得分:2)

它不是JSON,它是一个单项JSON对象的数组。

你可以这样得到0:

console.log(arr[0][key]);

但最好有一个可以按照你想要的方式使用的实际JSON对象。这看起来像{"eat" : 0, "sleep" : 1, "code" : 2}(只需移除[]和内部{}。如果您这样做,arr[key]将按预期工作...尽管{{1可能不是JSON对象的最佳名称:)

答案 3 :(得分:0)

function convertThatArrayToAnObject(arrayOfObjects) {
  var returnObject = {}
  for (var i = 0; i < arrayOfObjects.length; i++) {
    var key = Object.keys(arrayOfObjects[i])[0]
    returnObject[key] = arrayOfObjects[i][key] 
  }
  return returnObject
}