字符串作为javascript中的变量名

字符串作为javascript中的变量名,javascript,Javascript,我有一个对象数组:recs6,recs7,recs8记录23。我想使用内部for循环在数组中添加一个因子。但是'recs+n'被解释为字符串,而不是变量名。如何使其表示现有变量-rec6、rec7等 for(var n=6; n<24; n++){ for(var m=0; m<'recs+n'.length; m++){ hourBusyness += parseFloat(('recs'+n)[m].gtse); } hourAvgbu

我有一个
对象数组
recs6
recs7
recs8
<代码>记录23。我想使用内部
for
循环在数组中添加一个因子。但是'recs+n'被解释为字符串,而不是变量名。如何使其表示现有变量-
rec6
rec7

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);
}
for(var n=6;n“…作为一个对象数组…”在不向我们展示该数组的情况下,我们必须猜测您的意思

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

var foo = {
    recs6: {/*...*/}, // Or are these arrays? See note below
    recs7: {/*...*/},
    recs8: {/*...*/},
    recs9: {/*...*/},
    // ...
};
然后,您可以使用括号表示法访问它们:

for(var m=0; m < foo['recs'+n].length; m++){
for(var m=0;m
或者,正如dystroy在评论中指出的,只需使用数组:

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

for(var m=0; m < recs[n].length; m++){
var recs=[
{/*…*/},//或者这些是数组?请参见下面的注释
   {/*...*/},
   {/*...*/},
   {/*...*/},
   // ...
];
对于(var m=0;m

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

“…作为对象数组…”在不向我们展示该数组的情况下,我们必须猜测您的意思

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

var foo = {
    recs6: {/*...*/}, // Or are these arrays? See note below
    recs7: {/*...*/},
    recs8: {/*...*/},
    recs9: {/*...*/},
    // ...
};
然后,您可以使用括号表示法访问它们:

for(var m=0; m < foo['recs'+n].length; m++){
for(var m=0;m
或者,正如dystroy在评论中指出的,只需使用数组:

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

for(var m=0; m < recs[n].length; m++){
var recs=[
{/*…*/},//或者这些是数组?请参见下面的注释
   {/*...*/},
   {/*...*/},
   {/*...*/},
   // ...
];
对于(var m=0;m


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

使用
这个['recs'+n]
而不是
('recs'+n)

使用
这个['recs'+n]
('recs'+n)

我不确定你能不能这样做。但是,你可以把你的rec*放到字典里,这样你就可以写:
recsDict['recs'+n]
来访问你的第n个recs数组。

我不确定你能不能这样做。但是,你可以把你的rec*放到字典里,这样你就可以写:
recsDict['recs'+n]
访问您的第n个recs数组。

您可以通过使用JSON对象进行某种欺骗

var t = {};
t.recs6 = values;
//later...
t[('recs'+n)]
//can retrieve your data.

您可以通过使用JSON对象进行某种欺骗

var t = {};
t.recs6 = values;
//later...
t[('recs'+n)]
//can retrieve your data.

正如昆汀所说,这对我来说就像是一种代码味道。你能试着重构REC使其成为一个数组吗

然而,以下工作:

window['recs' + n].length

正如昆汀所说,这对我来说就像是一种代码味道。你能试着重构REC使其成为一个数组吗

然而,以下工作:

window['recs' + n].length

您可以创建一个数组,其中key是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);
    }
var数组=[“recs1”,5],“recs2”,10],…,[“recs23”,42];
for(var i=0;i对于(var m=0;m,您可以创建一个数组,其中key是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);
    }
var数组=[“recs1”,5],“recs2”,10],…,[“recs23”,42];
for(var i=0;i
对于(var m=0;mDon't!重构以使用一个实数组,而不是一堆具有类似名称的自变量。我们在编程语言中使用数组正是出于这个原因!@Quentin-我使用switch case分解了一个大json数组来生成这些小时记录。因此,recs6包含所有日期为小时6的记录。然后我将uld汇总gtse并找出第6小时的平均值。将其分解为一个数组,而不是一堆变量(具有类似名称)包含数组。不要!重构以使用真实数组,而不是一堆具有类似名称的自变量。我们在编程语言中使用数组正是出于这个原因!@Quentin-我通过使用switch case生成这些小时记录来分解一个大json数组。因此recs6包含所有日期为小时6.t的记录然后,我将汇总gtse并找到第6个小时的平均值,然后将其分解为一个数组,而不是一堆变量(具有相似的名称)包含数组。嗯……这里的数组会更干净。@dystroy:我不知道我们是否有足够的信息来了解这一点。但是,很可能。嗯……这里的数组会更干净。@dystroy:我不知道我们是否有足够的信息来了解这一点。但是,很可能。这里没有JSON。为什么有括号?请不要将JavaScript对象与JSON混淆。这里没有JSON。为什么要用括号?请不要将JavaScript对象与JSON混淆。你假设它们是全局对象……代码不需要在严格模式下工作。是的,这是一个有缺陷的解决方案。但这就是问题的答案。在这种情况下,最好的解决方案可能不是o使用数组,如果他控制变量的创建。但这不是一个关于代码约定的问题,而是关于使用字符串作为变量的问题。你假设它们是全局变量……并且代码不需要在严格模式下工作。是的,这是一个有缺陷的解决方案。但这是问题的答案。在这种情况下,最好的解决方案如果他控制变量的创建,他可能会使用数组。但这不是关于代码约定的问题,而是关于使用字符串作为变量的问题。只有当变量是全局变量时,这才有效。只有当变量是全局变量时,这才有效