2014-05-17 94 views
2
var x = ["a", "b", "c"]; 
for(var i = 0; i < x.length; i++){ 

x[i] = x[2 - i]; 

} 

My approach: 
for i = 0 => x[0] = x[2] (which is "c", so replace "a" with "c") 
for i = 1 => x[1] = x[1] (which is "b", so replace "b" with "b") 
for i = 2 => x[2] = x[0] (which is "a" so replace "c" with "a") 
for i = 3 test failed, stop. 
so x = ["c", "b", "a"] 

为什么控制台返回x为[“c”,“b”,“c”]? 有人可以告诉我,我是否完全误解了循环逻辑?谢谢!javascript for loop order

+2

难道你要找的'x.reverse()'? – Bergi

回答

1

编辑:整洁!不知道Array.reverse(),这绝对比下面更容易!

到第三次迭代发生时,第一次迭代中第一个元素已经被设置为“c”。

做是简单地使对输出的第二阵列的最简单方法:

var x = ["a", "b", "c"]; 
var y = new Array(x.length); 
for(var i = 0; i < x.length; i++){ 
    y[i] = x[2 - i]; 
} 
console.log(y) 
0

在i = 2,X [0]是 “c”,则替换它,当 “I” 为0所以它会是[“c”,“b”,“c”]。

2
var x = ["a", "b", "c"]; 
for(var i = 0; i < x.length; i++){ 

x[i] = x[2 - i]; 

} 

让我们写这样的代码进行手写:

var x = ['a', 'b', 'c']; 

x[0] = x[2]; // ['c', 'b', 'c'] 
x[1] = x[1]; // ['c', 'b', 'c'] 
x[2] = x[0]; // ['c', 'b', 'c'] 

的问题是,到时候你到i = 2你已经修改x[0] = x[2],所以x[2] = x[0]不出所料没有得到结果。

可以使用Array#reverse方法,我认为:

var x = ['a', 'b', 'c']; 
x.reverse(); // ['c', 'b', 'a']