我有一个名为 data 的数组,其中包含如下对象:
[{"timeslot":"6am-7am","Monday":5},{"timeslot":"7am-8am","Monday":0},{"timeslot":"8am-9am","Monday":10}]
每个对象包含两个键值对。我需要创建两个新数组:
这是我的Javascript:
var timeslots = [];
var numUsers = [];
var keys = Object.keys(data[0]);
var today = keys[1];
for(var i in data) {
timeslots.push(data[i].timeslot);
numUsers.push(data[i].today);
}
for循环的第一行有效,并返回以下 timeslots 数组:
["6am-7am", "7am-8am", "8am-9am"]
然而,第二行返回一个未定义元素的数组。
我的问题是, data 数组中对象的第二个键值有所不同。每个对象将包含一周中的同一天,但这一天可以是“星期一”到“星期日”中的任何一个。
如何动态引用它?
答案 0 :(得分:3)
您可以使用方括号表示法访问对象值,方法与使用i
时相同:
numUsers.push(data[i][today]);
N.B。但是,您的代码有几个非常重要的问题,最终会给您带来错误。其中最明显的一点是,您依赖于对象属性的顺序并使用Object.keys
检索键数组,将第二个键设置为today
变量的值。您的错误是在不同的系统和浏览器中,Object.keys(obj)[1]
之类的代码可能会返回不同的结果,因为JavaScript中的对象属性没有顺序。此外,您不应使用for .. in
语句来迭代数组,而应使用简单的for (var i = 0, len = arr.length; i < len; i++)
循环。最后,不要忘记,data
数组可能包含零项,因此您的代码data[0]
将引发错误。我建议你重新考虑你的应用程序的业务逻辑,并可能重写它以使其更可靠。
答案 1 :(得分:1)
你需要这个:
numUsers.push(data[i][Object.keys(data[i])[1]]);