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());