Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么连接和排序方法行为怪异?2.本质上相同的方法不会以相同的方式起作用_Javascript_Arrays - Fatal编程技术网

Javascript 为什么连接和排序方法行为怪异?2.本质上相同的方法不会以相同的方式起作用

Javascript 为什么连接和排序方法行为怪异?2.本质上相同的方法不会以相同的方式起作用,javascript,arrays,Javascript,Arrays,我正在研究FCC挑战,学习JS。这是我面临的最大挑战 我解决了这个问题,但是一个代码应该可以工作,而另一个则不行,我假设它们本质上是一样的 这是一个有效的代码: var globalArray = [5, 6, 3, 2, 9]; function nonMutatingSort(arr) { // Add your code below this line return [].concat(arr).sort(function(a, b) { return a - b; }

我正在研究FCC挑战,学习JS。这是我面临的最大挑战

我解决了这个问题,但是一个代码应该可以工作,而另一个则不行,我假设它们本质上是一样的

这是一个有效的代码:

var globalArray = [5, 6, 3, 2, 9];
function nonMutatingSort(arr) {
  // Add your code below this line
  return [].concat(arr).sort(function(a, b) {
    return a - b;
  });
  // Add your code above this line
}
nonMutatingSort(globalArray);
这个代码不起作用

var globalArray = [5, 6, 3, 2, 9];
function nonMutatingSort(arr) {
  // Add your code below this line
  let newArr = [];
  newArr.concat(arr);
  return newArr.sort(function(a,b){return a-b;});
  // Add your code above this line
}
nonMutatingSort(globalArray);
我的问题是为什么? 这两个代码都将旧数组连接到新数组,并且两个函数都应该返回排序数组

然而,在第一个函数中,连接失败。。。它只返回空的arr。
为什么?我很困惑。它在函数外部工作,但在函数中不工作

concat
不会改变任何现有数组(调用函数的数组或参数列表中的数组)。调用
concat
时,返回一个新数组。因此,独立声明

newArr.concat(arr);
不执行任何操作-您将
newArr
arr
连接起来,创建了一个新的组合数组,但该组合数组没有分配给任何对象;它得到评估,然后被丢弃

const arr1=['a'];
常数arr2=['b'];
//自己不做任何事情:
arr1.concat(arr2);
控制台日志(arr1);

控制台日志(arr2)
concat
不会改变任何现有数组(调用函数的数组或参数列表中的数组)。调用
concat
时,返回一个新数组。因此,独立声明

newArr.concat(arr);
不执行任何操作-您将
newArr
arr
连接起来,创建了一个新的组合数组,但该组合数组没有分配给任何对象;它得到评估,然后被丢弃

const arr1=['a'];
常数arr2=['b'];
//自己不做任何事情:
arr1.concat(arr2);
控制台日志(arr1);

控制台日志(arr2)concat方法返回一个新数组,所以您需要保存在同一个变量或另一个变量中。就你而言:

var globalArray = [5, 6, 3, 2, 9];
function nonMutatingSort(arr) {
  // Add your code below this line
  let newArr = [];
  newArr = newArr.concat(arr); //here it will return new new which you need to save
  return newArr.sort(function(a,b){return a-b;});
  // Add your code above this line
}
nonMutatingSort(globalArray);

concat方法返回一个新数组,所以您需要保存在同一个变量或另一个变量中。就你而言:

var globalArray = [5, 6, 3, 2, 9];
function nonMutatingSort(arr) {
  // Add your code below this line
  let newArr = [];
  newArr = newArr.concat(arr); //here it will return new new which you need to save
  return newArr.sort(function(a,b){return a-b;});
  // Add your code above this line
}
nonMutatingSort(globalArray);

我认为一旦你把
{}
放进去,你就必须使用
return
语句。试试第二个:
{return a-b}
我输入了code,但没有复制粘贴,谢谢。已编辑。如果有帮助,请向上投票。谢谢。
。slice()
通常用于浅层复制数组。我认为,一旦放置
{}
,您必须使用
return
语句。试试第二个:
{return a-b}
我输入了code,但没有复制粘贴,谢谢。已编辑。如果有帮助,请向上投票。谢谢。
。slice()
通常用于浅拷贝数组