javascript在循环中取消弹出

时间:2019-02-13 05:58:52

标签: javascript arrays

我正在研究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));

4 个答案:

答案 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]));