反转数组 - 雄辩的javascript第4章

时间:2015-02-19 17:48:38

标签: javascript arrays

我正在尝试解决这个问题而且我无法理解为什么函数reverseArrayInPlace不能按照我的意愿行事。函数中的console.log将返回一个反转数组,但是当我返回相同的内容时,我不会得到反转数组。

我是初学者所以请大家轻松解答。感谢



function reverseArray(array){
  var x = [];
    for (i=array.length - 1; i>=0; i--){
    x.push(array[i]);
  }
  return x;
}

function reverseArrayInPlace(array){
  console.log(reverseArray(array));
  return reverseArray(array);
}
    

//console.log(reverseArray(["A", "B", "C"]));
// → ["C", "B", "A"];
var arrayValue = [1, 2, 3, 4, 5];
reverseArrayInPlace(arrayValue);
console.log(arrayValue);
// → [5, 4, 3, 2, 1]




编辑:感谢您的回复。我能否就这个功能得到一些反馈:

 function reverseArrayInPlace(array){
  for (i=1; i<array.length; i++){
    var x = array[i];
    array.splice(i,1);
    array.unshift(x);
  }
  return array;
}

这似乎对我有用。你能看出它有什么问题吗?

4 个答案:

答案 0 :(得分:1)

你没有在适当的位置反转阵列

在您正在创建新数组的函数中,然后以相反的顺序添加元素

在函数的第一行中创建一个新变量

var x = [];

除非您想在reverseArray中更改实现以处理这两种情况,否则您需要在reverseArrayInPlace函数中实现不同的解决方案

你需要

       
  1. 确定要从前面交换的元素
  2.    
  3. 确定要从后面交换的元素
  4.    
  5. 知道何时到达阵列中间并停止
  6. 如果您愿意,可以选择返回数组,但由于进行了更改,因此您不需要

答案 1 :(得分:0)

reverseArrayInPlace()功能实际上并未正常运作。它正在调用reverseArray(),它正在创建一个新数组来存储元素。因此,它需要返回此值。

答案 2 :(得分:0)

为什么不呢......

var arrayValue = [1, 2, 3, 4, 5];
arrayValue = arrayValue.reverse();
console.log(arrayValue);

编辑:npm我看到你正在完成一个教程。 imo这是最优雅的方式。

答案 3 :(得分:0)

我在很长一段时间里都在努力解决同样的问题。要在没有.splice()或.reverse()的情况下完成此操作,请尝试以下操作。基本上,当你从数组的后面倒数时,你正在从数组的前面开始计数;当for循环中的倒计时“i”变量得到的位置数小于数组长度的一半时,值的交换应该停止。如果那里没有if语句,则值将交换回原始数组中的位置。那里有很多console.logs,所以你可以看到代码循环时发生了什么。

var testArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

var reverseArrayInPlace = function(inputArray){
    var countUp = 0;
    for (i= (inputArray.length - 1); i>=0; i--){
        var stash = inputArray[countUp];
        if (i >= Math.floor(inputArray.length/2)){
            inputArray[countUp] = (inputArray[i]);
            inputArray[i] = stash;
                console.log('stash:' + stash);
                console.log('countUp:' + countUp);
                console.log('i:' + i);
                console.log('inputArray:' + inputArray);
                console.log('iA.length:' +inputArray.length);
                console.log('');
            countUp ++;
        }
    }
    return inputArray;
};


reverseArrayInPlace(testArray);