JS - 使用for循环来复制数组属性

时间:2014-02-04 20:16:55

标签: javascript arrays for-loop

我试图通过解决Flanagan,JS:The Definitive Guide中的问题来学习JS。如果有人指出我的代码中的错误,我将不胜感激。目标是创建一个与数组a具有相同属性的新数组b。我不明白有两个主要结果:

  • 数组b以长度为4结束。它不应该像数组a一样长3吗?
  • b [0]返回undefined。

这是我的代码:

var a = [1, 2, 3];
var b = [];
for (var i = 0; i < a.length; i++);
b[i] = a[i];
alert(b[0]);

var equalArrays = function (a,b) {
    if (a.length !== b.length) return false;
    if (a[i] !== b[i]) return false;
    else return true;
    };
alert (equalArrays(a,b));

5 个答案:

答案 0 :(得分:2)

这里的问题是你的forloop永远不会运行 - 你在循环条件之后放置一个分号(;),因此它永远不会识别b[i] = a[i];行作为for循环。

要解决此问题,只需删除分号:

var a = [1, 2, 3];
var b = [];
for (var i = 0; i < a.length; i++)
    b[i] = a[i];
alert(b[0]);

为了使它更清晰,您还可以在循环内容周围添加大括号。这将使得犯这样的错误变得更加困难。 forloop的代码将是:

for (var i = 0; i < a.length; i++) {
    b[i] = a[i];
}

答案 1 :(得分:2)

for (var i = 0; i < a.length; i++);
b[i] = a[i];

分号将其拧紧。最好使用{}来提高可读性。

for (var i = 0; i < a.length; i++) {
    b[i] = a[i];
}

答案 2 :(得分:1)

你的for循环结束时有一个;所以它只会将i增加到4。

然后在下一行,您指定b[4] = a[4]来解释您的问题(b[0]undefinedb的长度为4)。只需删除;

即可
for (var i = 0; i < a.length; i++)
    b[i] = a[i];

在IDE中自动缩进或在{ ... }中包裹您的正文有助于注意这些类型的错误。

答案 3 :(得分:1)

将您的for循环更改为

for (var i = 0; i < a.length; i++)
    b[i] = a[i];

(跳过;“for line”的结尾处。)

或者通过像这样替换for循环来更清楚:

for (var i = 0; i < a.length; i++)
{
    b[i] = a[i];
}

这实际上意味着相同但可能更容易理解,括号中的代码部分会在每次for循环迭代时执行。

答案 4 :(得分:1)

虽然for语句在技术上可以使用后面的单个执行语句运行,但为了清楚起见,大多数人甚至使用单个语句来使用块。

for (var i = 0; i < a.length; i++) {
  b[i] = a[i];
}

代码中执行语句之前的分号表示循环运行a.length次而不执行任何操作。

您还应该查看数组访问的.slice()操作。