我正在研究JS,我有一个练习要求将数组反转就位(不使用第二个数组)并且不使用“ reverse”。尽管我已经有了练习的解决方案,但我不明白为什么我的解决方案不起作用,这里是:
function reverseArrayInPlace (arr){
const k = arr[0];
while (arr[arr.length-1] !== k){
arr.unshift(arr.pop());
}
return arr;
}
console.log(reverseArrayInPlace(arr1));
答案 0 :(得分:1)
将数组的末尾放在第一个位置:
[1, 2, 3]
[3, 1, 2]
[2, 3, 1]
[1, 2, 3]
如您所见,实际上并没有扭转任何事情。
答案 1 :(得分:0)
如果您的数组包含第一个元素的重复项,它将不起作用。 当您将第一个元素用作键时,每当任何重复元素成为最后一个元素时,循环就会退出。
答案 2 :(得分:0)
尝试一下,只需检查所选的两个元素是否相等,如果相等就不要交换,否则交换。迭代直到指针k
是指针<=
的指针j
。
function reverseArrayInPlace (arr){
let first = 0;
let last = arr.length - 1;
let k = first, j = last;
while(k <= j){
if(arr[k] !== arr[j]){
let temp = arr[k];
arr[k] = arr[j];
arr[j] = temp;
}
k++;
j--;
}
return arr;
}
arr1 = [1, 2, 3, 4];
console.log(reverseArrayInPlace(arr1));
arr1 = [1, 2, 3];
console.log(reverseArrayInPlace(arr1));
答案 3 :(得分:0)
此方法将解决问题而不会弹出或不移位。试试这个。
function reverseArray(array) {
for (let i = 0; i < Math.floor(array.length / 2); i++) {
let oldArray = array[i];
array[i] = array[array.length - 1 - i];
array[array.length - 1 - i] = oldArray;
}
return array;
}
console.log(reverseArray([1,2,3]));