【发布时间】:2016-06-16 02:32:56
【问题描述】:
我正在编写我认为简单的 for 循环,但它的行为方式并不符合我的预期。我想了解它为什么会这样做:
function pair(str) {
var finalArray = [];
var pushArray = [];
var lookup = {
G: "C",
C: "G",
A: "T",
T: "A"
};
for (i=0; i<str.length; i++) {
pushArray[0] = str[i];
pushArray[1] = lookup[str[i]];
finalArray.push(pushArray);
}
return finalArray;
}
pair("ATCGG");
我希望它返回 [["A","T"],["T","A"],["C","G"],["G","C"],[ "G","C"]]
我实际上得到的是 [["G","C"],["G","C"],["G","C"],["G","C"] ,["G","C"]]
似乎所有的 ["G","C"] 都是针对 i = 4 的。为什么我的代码没有循环?我错过了什么?
【问题讨论】:
-
只有一个
pushArray,并且您在循环的每次迭代中重复使用它。您必须在每次迭代时创建一个 new 数组,以使其按您期望的方式工作。 -
我以为每次 for 循环运行时我都在重新定义 pushArray[0] 和 pushArray[1]? JS 不允许你在 for 循环中这样做吗?
-
添加
pushArray = [];作为循环内部的第一条语句。这将形成一个全新的阵列。您只是一遍又一遍地在列表中推送相同的数组。 -
啊啊啊啊啊……非常感谢!!
-
警告:您在
for循环中使用未声明的变量i是一个等待发生的重大错误。在严格模式下运行您的代码,这将是一个错误(因此您不会意外地以这种方式编写代码)。始终声明任何局部变量。
标签: javascript arrays object for-loop