繁体   English   中英

reverseArrayInPlace eloquentJS

[英]reverseArrayInPlace eloquentJS

我想出了一种简单的方法来解决这个问题,并且解决了。

var reverseArrayInPlace = function(arr) {
  var result = [];
  for(var i = 0; i < arr.length; i++) {
    result.unshift(arr[i]);
  }
  for(var j = 0; j < result.length; j ++) {
    arr[j] = result[j];
  }
};
//test
var arrayValue = [1, 2, 3, 4, 5];
reverseArrayInPlace(arrayValue);
console.log(arrayValue);
//[5,4,3,2,1]

但是,我想知道为什么不能仅通过将arr参数分配给结果值[5,4,3,2,1]来使用更简单的方法吗? 但是下面的代码不起作用,它仍然打印出[1,2,3,4,5]

var reverseArrayInPlace = function(arr) {
  var result = [];
  for(var i = 0; i < arr.length; i++) {
    result.unshift(arr[i]);
  }
  arr = result;
};
//test
var arrayValue = [1, 2, 3, 4, 5];
reverseArrayInPlace(arrayValue);
console.log(arrayValue);
//[1,2,3,4,5]

在您的开发控制台中尝试以下操作:

var arr = [1,2,3];

function retArr(arr){
    var res = arr;
    res = [3,2,1];
    return res;
}
retArr(arr); // returns 3,2,1
console.log(arr); // logs 1,2,3

您要做的就是创建一个新数组! 函数的参数是按值传递。 直接进行循环访问的原因是因为数组属性是按引用传递的。

PS实际的原地逆转应如下所示:

function reverseInPlace(array){
    var swap = function(i,j){
        var t = array[i];
        array[i] = array[j];
        array[j] = t;
    };
    for (var i = 0; i < array.length/2;i++){
        swap(i,array.length-i-1);
    }
}

尝试使用.slice() .pop()

 var reverseArrayInPlace = function(arr) { var copy = arr.slice(0); for (var n = 0; n < arr.length; n++) { arr[n] = copy.pop(); } return arr }; //test var arrayValue = [1, 2, 3, 4, 5]; reverseArrayInPlace(arrayValue); console.log(arrayValue); 

或者,使用Array.prototype.sort()

 var reverseArrayInPlace = function(arr) { arr.sort(function(a, b, index) { return index < index + 1 ? -1 : 1 }); }; //test var arrayValue = ["a", "b", "c", "d", "e"]; reverseArrayInPlace(arrayValue); console.log(arrayValue); 

暂无
暂无

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

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