包含不返回所需结果的数组方法的JavaScript函数

时间:2016-09-16 21:55:05

标签: javascript arrays methods

我是一名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代码似乎并没有改变数组。为什么不?当我将该行测试为独立代码时,它可以正常工作。任何解释将不胜感激。谢谢!

3 个答案:

答案 0 :(得分:2)

concatslice创建数组而不更改原始数据。 shift 修改它所作用的数组。

基本上,您使用concat生成了一堆新的子数组,但是您没有对它们做任何事情。

答案 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)

回答了superconcat的工作原理。如果您不想创建现有数组的本地副本,那么如何通过算法方法轻松实现此功能的小片段。

shift