我是一名JavaScript初学者,我已经编写了下面的片段,在我的脑海中应该返回一个数组:[5,4,3,2,1],但它返回[5]。我意识到有更好的方法来实现结果,但我试图理解的是为什么我的解决方案无法正常工作。
function reverseArray(array) {
for (var i = 3; i >= 0; i--)
array.concat(array.slice(i,i+1));
for (var i = 3; i >= 0; i--)
array.shift();
return array;
};
var arrayValue = [1, 2, 3, 4, 5];
reverseArray(arrayValue);
console.log(arrayValue);
// JS Bin returns: [5]
shift方法似乎有效,但concat / slice代码似乎并没有改变数组。为什么不?当我将该行测试为独立代码时,它可以正常工作。任何解释将不胜感激。谢谢!
答案 0 :(得分:2)
答案 1 :(得分:2)
Mike说:array.concat(…)
不会修改array
,它会创建一个新的数组,然后被忽略。
您似乎只想附加单个值 - 这是push
的作用:
function reverseArray(array) {
for (var i = 3; i >= 0; i--)
array.push(array[i]);
for (var i = 3; i >= 0; i--)
array.shift();
return array;
}
您可能还想使用从array.length
派生的变量值,而不是常量3
。
答案 2 :(得分:0)
回答了super
和concat
的工作原理。如果您不想创建现有数组的本地副本,那么如何通过算法方法轻松实现此功能的小片段。
shift