反转数组而无需“反转”或复制数组
问题内容:
我正在尝试解决以下练习:
不使用反向方法,不使用第二个数组并且不复制任何值而对数组进行反向。
我考虑过将数组作为对象,然后从头到尾更新数组,但我认为您也可以对其进行更新。
尝试了一些简单的方法:
function reverseArray(array) {
for (var i = 0; i < array.length; i++) {
// var elem = array.shift();
var elem = array.shift()
array.push(elem)
}
return array
}
array = ['a', 'b','c','d','e'];
reverseArray(array);
但这并没有真正改变它。有关如何执行操作的任何建议或解释?
问题答案:
使用ES6语法,您不需要将值复制到临时变量中(这是最后一个要求的内容吗?)。
function reverse(arr) {
for(let i = 0, j = arr.length-1; i < j; i++, j--)
[arr[i], arr[j]] = [arr[j], arr[i]];
}
const arr = ['a','b','c','d','e'];
reverse(arr);
console.log(arr);
可能有人争辩说,数组是在这里创建的(如果引擎没有对其进行优化),就像splice
创建数组一样(作为其返回值)。