0

我有一个数组Objectsrecs6,,......。我想使用内部循环在数组中添加一个因子。但是 'recs+n' 被解释为字符串而不是变量名。我怎样才能让它代表现有的变量 -等?recs7recs8recs23forrec6rec7

for(var n=6; n<24; n++){

    for(var m=0; m<'recs+n'.length; m++){
        hourBusyness += parseFloat(('recs'+n)[m].gtse);
    }

    hourAvgbusyness = hourBusyness / ('recs'+n).length;
    console.log(hourAvgbusyness);
}
4

6 回答 6

3

使用this['recs'+n]代替('recs'+n)

于 2013-07-31T09:33:05.427 回答
0

我不确定你能做到这一点。但是,您可以将您的 recs* 放入字典中,以便您可以编写:recsDict['recs'+n]访问您的第 n 个 recs 数组。

于 2013-07-31T09:33:33.127 回答
0

您可以通过使用 JSON 对象来作弊。

var t = {};
t.recs6 = values;
//later...
t[('recs'+n)]
//can retrieve your data.
于 2013-07-31T09:33:44.987 回答
0

正如 Quentin 所说,这对我来说就像是一种代码气味。您可以尝试重构以便 recs 是一个数组数组吗?

但是,以下工作:

window['recs' + n].length
于 2013-07-31T09:34:26.133 回答
0

“......作为一个对象数组......”没有我们展示那个数组,我们不得不猜测你的意思。

但是,如果您将它们作为属性放在对象上:

var foo = {
    recs6: {/*...*/}, // Or are these arrays? See note below
    recs7: {/*...*/},
    recs8: {/*...*/},
    recs9: {/*...*/},
    // ...
};

然后你可以使用括号符号来访问它们:

for(var m=0; m < foo['recs'+n].length; m++){

或者,正如dystroy在评论中指出的那样,只需使用一个数组:

var recs = [
    {/*...*/}, // Or are these arrays? See note below
    {/*...*/},
    {/*...*/},
    {/*...*/},
    // ...
];

for(var m=0; m < recs[n].length; m++){

请注意,您正在使用length它们的属性,这表明它们是数组,而不仅仅是普通对象,但上面的基本内容是如何获取事物 ( foo['recs'+n])。

于 2013-07-31T09:31:53.653 回答
0

您可以创建一个键为 recsN 的数组,然后像这样访问它:

var array = [["recs1",5],["recs2",10],...,["recs23", 42]];

for (var i = 0; i < array.length;i++) {
    for(var m=0; m<array[i].length; m++){
        hourBusyness += parseFloat(array[i][m].gtse);
    }
于 2013-07-31T09:35:34.340 回答