Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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 反转数组,并返回相同的数组_Javascript_Arrays_Iteration - Fatal编程技术网

Javascript 反转数组,并返回相同的数组

Javascript 反转数组,并返回相同的数组,javascript,arrays,iteration,Javascript,Arrays,Iteration,我必须编写一个反转数组的函数(我知道反转方法,但这次我必须编写一个函数)。此函数必须将数组变量作为输入,并返回相同的变量,但元素顺序相反。我不明白的是,为什么这段代码会起作用: 函数反转arrayinplace(数组){ 对于(i=array.length;i>0;i--){ 数组.shift(数组.push(i)); } 返回数组; };在代码的第二个版本上 首先,请注意,pop方法不带参数,因此将其传递给i没有额外的效果 然后以可能传递给此函数的数组为例: ['a', 'b', 'c',

我必须编写一个反转数组的函数(我知道反转方法,但这次我必须编写一个函数)。此函数必须将数组变量作为输入,并返回相同的变量,但元素顺序相反。我不明白的是,为什么这段代码会起作用:

函数反转arrayinplace(数组){
对于(i=array.length;i>0;i--){
数组.shift(数组.push(i));
}
返回数组;
};在代码的第二个版本上
首先,请注意,
pop
方法不带参数,因此将其传递给i没有额外的效果

然后以可能传递给此函数的数组为例:

 ['a', 'b', 'c', 'd']
在每次迭代中,从数组中弹出最后一个元素,并使用以下语句将其移回到前面(我删除了I):

这是在循环的4次迭代中发生的情况:

 ['d', 'a', 'b', 'c']
 ['c', 'd', 'a', 'b']
 ['b', 'd', 'a', 'b']
 ['a', 'b', 'c', 'd']
。。。你的背部和你开始使用的相同阵列

在代码的第一个版本上 请注意,
shift
push
的顺序似乎不正确,因此在任何方面都是有用的。另外,
push
将参数作为要添加到数组末尾的值,但您要传递的是索引,而不是数组中的值:

array.shift(array.push(i));
然后移位取出第一个元素,其值为。。。迷路了

这就是迭代中发生的情况:

['b', 'c', 'd', 4]
['c', 'd', 4, 3]
['d', 4, 3, 2]
[4, 3, 2, 1]
因此,这也不会反转您的数组(仅当您碰巧传递了它时),但正如您所看到的,这完全是偶然的

如果您想像这样交换
shift
push

array.push(array.shift());
这段代码会更有意义,因为您实际上会从数组中取出第一个值,并在最后将其添加回数组中。但就像代码的第二个版本一样,最终将得到原始数组。您可以在不更改元素顺序的情况下循环元素

如何逆转 您可以从数组的两个远端开始交换值,然后向内工作。在这里,我将使用ES6解构分配语法进行交换:

函数反转arrayinplace(数组){
对于(var i=array.length-1,j=0;i>j;i--,j++){
[array[i],array[j]=[array[j],array[i]];
}
}
//演示:
变量数组=['a','b','c','d'];
反向放置(阵列);

console.log(数组);//['d'、'c'、'b'、'a']
根据定义,他们做的不是同一件事
shift
unshift
是不同的方法。如果目标是反转接收到的数组的内容,则第一种方法“不起作用”。相反,它所做的是用数组长度中的数字
1
替换其内容,从而删除其原始内容。例如,
[“a”、“b”、“c”]
变为
[3,2,1]
。push
方法返回数组的当前
长度
!如果你按下移位的元素,你只会得到相同的数组。如果你取消移动一个弹出的元素也是一样的。提供一个不显示任何内容的代码段有什么意义?
array.push(array.shift());