如何在Javascript对象中动态引用变量键名?

时间:2017-01-09 22:33:59

标签: javascript arrays

我有一个名为 data 的数组,其中包含如下对象:

[{"timeslot":"6am-7am","Monday":5},{"timeslot":"7am-8am","Monday":0},{"timeslot":"8am-9am","Monday":10}]

每个对象包含两个键值对。我需要创建两个新数组:

  • 一个数组,时间段,包含与“时间段”键关联的每个值
  • 一个数组 numUsers ,包含与“Monday”键关联的每个整数值

这是我的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 数组中对象的第二个键值有所不同。每个对象将包含一周中的同一天,但这一天可以是“星期一”到“星期日”中的任何一个。

如何动态引用它?

2 个答案:

答案 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]]);
相关问题