为什么未定义会被记录?
var arr = [{"eat" : 0}, {"sleep" : 1}, {"code" : 2}];
var key = "eat";
console.log(arr[key]);
我希望在日志中看到0
。
答案 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
}