【问题标题】:How to push dynamic values into an array in jquery如何将动态值推送到jquery中的数组中
【发布时间】:2015-03-23 17:00:57
【问题描述】:

这是我的数组ARRAY

 ARRAY = ["A","B","C","D","E"];
 var mlength = ARRAY.length;

我的变量是

 var mname0 = a, var mname1 = b, var mname2 = c, var mname3 = d, var mname4 = e

 var month = JAN;

我正在尝试将值推送到基于 mlength 的数组。我尝试了下面的代码,但这不起作用

  for (var i = 0, i < mlength; i++) {
      MARKETS[i].push(parseFloat(findDataForMonth(mname+i, month)) || null);
  }

那是行不通的。我收到一个错误

如何将变量推入 for 循环?

【问题讨论】:

  • 此处出现错误for (var i = 0; i &lt; mlength; i++)。看到;mname+i 不起作用。你可能需要window["mname"+i]
  • 脱掉[i]应该是这样的:MARKETS.push(...

标签: javascript jquery arrays for-loop


【解决方案1】:

mname+i 不会做你认为它正在做的事情。假设i2。您可能期望mname+i 返回c(变量mname2 的值)。相反,它实际上会添加mname(一个未定义的变量)+2,得到一个ReferenceError

你的mname0mname1等变量应该是一个数组:

var mname = [a, b, c, d, e];

然后像这样引用它:

findDataForMonth(mname[i], month)

【讨论】:

  • 为了进一步澄清,您要做的是运行时评估,看起来像这样eval("mnane"+i),但不要那样做。例如,建议使用数组或对象,也可以使用更简洁的代码。
  • @Nate - 那么解决方案是什么?
  • 另外,我不确定 a、b、c、d... 是否应该是字符串或变量。如果它们应该是字符串,则应为 var mname = ["a", "b", "c", "d", "e"];
  • 使用数组应该是解决方案。不过,这显然比您展示的代码更多。数组不起作用是有原因的吗?
【解决方案2】:

由于 ARRAY 中的值和 mname vars 的值相同(只是大小写不同),您可以执行以下操作。

var ARRAY = ["A","B","C","D","E"];
var mlength = ARRAY.length;
var month = JAN;
var mnames = ["a", "b", "c", "d", "e"];
//OR
//var mnames = [1, 2, 3, 4, 5];

for (var i = 0; i < mlength; i++) {
    var mname = mnames[i];
    //instead of mname+i just use mname
}

你的方式:

1) 将以下代码包装在 headbody 中,没有 ready 处理程序(例如 window.onload dom ready 等),因为 mname 变量将是本地的,在 @ 中不可用否则为 987654328@ 范围。

var ARRAY = ["A","B","C","D","E"];
var mlength = ARRAY.length;
var mname0 = 'a';
var mname1 = 'b';
var mname2 = 'c';
var mname3 = 'd';
var mname4 = 'e';

for (var i = 0; i < mlength; i++) {
    alert (window['mname'+i]);
}

2) 如果您要在 ready 处理程序之一中使用代码,您有 2 个选项。定义您的 mname 变量而不使用 var 关键字或添加 window. 如下所示。

var ARRAY = ["A","B","C","D","E"];
var mlength = ARRAY.length;
mname0 = 'a'; // or window.mname0 = 'a';
mname1 = 'b'; // or window.mname1 = 'b';
mname2 = 'c'; // etc.
mname3 = 'd';
mname4 = 'e';

for (var i = 0; i < mlength; i++) {
    alert (window['mname'+i]);
}

记住,污染全局命名空间是一种不好的做法,除非你真的需要。

【讨论】:

  • 我不能那样做。我只是以 var mname0 = a, var mname1 = b 为例。我需要给出 mname+i 并且必须替换 i 的位置。这是要求
  • 当然,我已经编辑过,但您的问题应该更具体。 我不能在第一次尝试这个问题时就给出这样的答案,这对我们很有帮助,也为我们节省了很多时间!
  • 这里的 mnames 是可变的,我怎样才能把它当作一个数组我有 mname0、mname1 等等
  • 我明白了。但是如何将变量推送到数组中,例如 for (var i = 0, i
猜你喜欢
  • 2016-07-07
  • 2020-02-21
  • 1970-01-01
  • 2011-06-17
  • 2021-11-10
  • 1970-01-01
  • 2015-02-09
  • 1970-01-01
  • 2022-12-12
相关资源
最近更新 更多