繁体   English   中英

JS:反转一个数组但只反转原始数组 - >错误:没有输出运行

[英]JS: Reverse an Array but Reverse the Original Array Only --> Error: running with no output

我有以下问题:

//反向数组

编写一个接受数组的函数并将该数组反转到位。 该行为应该模仿本机.reverse()数组方法的行为。 但是,您的反向函数应该接受数组作为参数进行操作,而不是作为该数组上的方法调用。

不要在自己的实现中使用本机.reverse()方法。

我尝试了以下代码:

let myArray = [1, 2, 3, 4];


function reverse(myArray) {

  let newArray = []; 

  // pop all of elements from roginal array, and store in new array

  for (i=myArray.length-1; i>=0; i--){
    newArray.push(myArray[i])

    console.log(newArray)
  }

  while (newArray.length){

    myArray.unshift(newArray)
  }


  return myArray; 
}


reverse(myArray);
console.log(myArray) // expected output is [4, 3, 2, 1]

我的代码一直在运行,没有生成console.log输出。 注意我想要对输入数组参数进行反向操作。

我究竟做错了什么? 另外,while(newArray.length)是什么意思/它在概念上做了什么?

您可以交换第一个和最后一个元素,并从最内部项开始。

 function reverse(array) { var i = array.length >> 1, // take half of the length as integer l = array.length - 1; // last index value to calculate the other side while (i--) [array[i], array[l - i]] = [array[l - i], array[i]]; } var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; reverse(a); console.log(...a); 

只需从数组的任一端开始交换对,直到没有剩下:

function reverse(a) {
    for (let i = 0, j = a.length - 1; i < j; ++i, --j) {
        let tmp = a[i];
        a[i] = a[j];
        a[j] = tmp;
    }
    return a;  // not required, but allows use in an expression
}

在ES2016中,您可以使用解构分配在一次操作中执行交换,而无需使用临时变量:

function reverse(a) {
    for (let i = 0, j = a.length - 1; i < j; ++i, --j) {
        [ a[j], a[i] ] = [ a[i], a[j] ];
    }
    return a;
}

您可以交换数组中的第一个和最后一个元素,并分别迭代地交换next和prev。

您不必访问循环中的完整集,获取中间元素并围绕该元素旋转索引

 function reverseInArray(arr){ let len = arr.length; let temp; for(let i=0; i < len/2; i++){ temp = arr[i]; arr[i] = arr[len - i - 1]; arr[len - i - 1] = temp; } return arr; } console.log(reverseInArray([1,2,3,4,5])); 

您可以迭代数组'直到中间,并在当前( i )和相反( length - i - 1 )之间切换:

 const myArray = [1, 2, 3, 4]; function reverse(myArray) { const length = myArray.length; const middle = Math.floor(length / 2); for(let i = 0; i < middle; i++) { let tmp = myArray[i]; myArray[i] = myArray[length - i - 1]; myArray[length - i - 1] = tmp; } } reverse(myArray); console.log(myArray) // expected output is [4, 3, 2, 1] 

不确定为什么你需要unshift你可以迭代并返回你推送值的数组

 let myArray = [1, 2, 3, 4]; function reverse(myArray) { let newArray = []; for (i = myArray.length - 1; i >= 0; i--) { newArray.push(myArray[i]) } return newArray; } console.log(reverse(myArray)) 

这里:

  while (newArray.length){

    myArray.unshift(newArray)
  }

你要添加到myArray ,但不要从newArray ,因此无限循环。 Methinks应该是myArray.unshift(newArray.pop())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM