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

包含未返回所需结果的数组方法的JavaScript函数,javascript,arrays,methods,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--) ar

我是一名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代码似乎没有改变数组。为什么不呢?当我将该行作为独立代码进行测试时,它运行良好。如有任何解释,将不胜感激。谢谢

并在不更改原始阵列的情况下创建新阵列。修改它作用的数组

基本上,您正在使用
concat
生成一组新的子数组,但您没有对它们做任何操作。

并在不更改原始数组的情况下创建一个新数组。修改其作用的数组


基本上,你正在用
concat
生成一堆新的子数组,但你没有用它们做任何事情。

迈克说的:
array。concat(…)
没有修改
array
,它创建了一个新数组,然后被忽略

似乎您只想附加一个值-这就是它的作用:


您可能还希望使用从
数组.length
派生的变量值,而不是Mike所说的常量
3
,数组。concat(…)不修改
数组,它创建了一个新数组,然后被忽略

似乎您只想附加一个值-这就是它的作用:


您可能还希望使用从数组.length派生的变量值,而不是常量
3

这里有一个答案
concat
shift
函数。下面是一个小片段,如果您不想创建现有数组的本地副本,如何通过算法方法轻松实现此函数

function reverseArray(array) {
  var i = 0;
  var j = array.length - 1;

  while (i < j) {
    var tempArrayElement = array[i];
    array[i] = array[j];
    array[j] = tempArrayElement;

    i++;
    j--;
  }
}
函数反向数组(数组){
var i=0;
var j=array.length-1;
而(i
答案是如何工作的
concat
shift
功能。下面是一个小片段,如果您不想创建现有数组的本地副本,如何通过算法方法轻松实现此函数

function reverseArray(array) {
  var i = 0;
  var j = array.length - 1;

  while (i < j) {
    var tempArrayElement = array[i];
    array[i] = array[j];
    array[j] = tempArrayElement;

    i++;
    j--;
  }
}
函数反向数组(数组){
var i=0;
var j=array.length-1;
而(i
为什么不交换第一个和最后一个元素以及第一个+1和最后一个-1,依此类推?
arrayValue.reverse()
concat/slice代码似乎不会改变数组。为什么不呢?
因为
concat
slice
都不能修改数组。我知道这是一个枯燥的解释,但它就是解释。为什么不交换第一个和最后一个元素以及第一个+1和最后一个-1,依此类推?
arrayValue.reverse()
concat/slice代码似乎不会改变数组。为什么不呢?
因为
concat
slice
都不能修改数组。我知道这是一个无聊的解释,但这是一个解释,只是个人的。我很感激你的回答。@NinaScholz谢谢:)我也很感激你的回答。高质量的东西,谢谢!这是我试图理解的核心(尽管看起来很简单)。感谢所有给他或她的建议的人——都是好东西,只是个人的。我很感激你的回答。@NinaScholz谢谢:)我也很感激你的回答。高质量的东西,谢谢!这是我试图理解的核心(尽管看起来很简单)。感谢所有给他或她的建议的人——都是好东西。