带for循环的反向数组

时间:2018-06-23 09:34:25

标签: javascript arrays for-loop

快速JavScript问题。在以下代码中,我将反转传递给函数arr的数组reverseArray

在第一段代码中,即使我在循环arr中操作且变量newArr保留了{{1}的初始值,本地变量arr仍在不断变化。 }。因此,当arr.length达到值3时,循环失败。

function reverseArray (arr) {
    var newArr = [];
    var inArr = arr;
    console.log(inArr);
    for (i = 0; i < arr.length; i++) {      
        newArr[i] = inArr.pop(i);       
    }   
    return newArr;
}
reverseArray(["A", "B", "C", "D", "E", "F"]);

// OUTPUT: ["F", "D", "E"]

另一方面,如果我将arr.length存储在局部变量numArr上,则它可以完美工作并反转数组。

function reverseArray (arr) {
    var numArr = arr.length;    
    var newArr = [];    
    for (i = 0; i < numArr; i++) {      
        let inArr = arr;
        newArr[i] = inArr.pop(i);       
    }
    return newArr;
}

reverseArray(["A", "B", "C", "D", "E", "F"]);

// OUTPUT: ["F", "E", "D", "C", "B", "A"]

我想念什么?

5 个答案:

答案 0 :(得分:3)

您可以获取数组的副本,并使用副本的长度检查下一个pop / push命令。

# read file
df = pd.read_csv('citynames.csv', encoding='ISO-8859-1')

# sort by 'city', ascending
df = df.sort_values('city')

# export to csv
df.to_csv('citynames_out.csv', index=False)

要满足条件,您也可以使用function reverseArray(array) { var newArr = [], inArr = array.slice(); // take copy of primitive values while (inArr.length) { // check decrementing length newArr.push(inArr.pop()); } return newArr; } console.log(reverseArray(["A", "B", "C", "D", "E", "F"]));语句。

for

答案 1 :(得分:2)

popMDNspec)是一个mutator方法:它更改了调用它的数组的状态。很自然,inArr.pop(1)修改了arr(在您的第一个示例中),因为inArrarr都引用相同的数组。

也许值得一提的是,pop不接受任何参数,因此1不执行任何操作。

在第一个示例中,最好的选择是为另一个变量(例如j)分配初始值arr.length - 1,然后使用arr[j]来获取值,然后减小{{ 1}}随着增加j。 (此外,没有指向i的位置,您需要声明inArr以避免我所说的The Horror of Implicit Globals

i

您也可以只使用function reverseArray (arr) { var newArr = []; for (var i = 0, j = arr.length - 1; i < arr.length; i++, j--) { newArr[i] = arr[j]; } return newArr; } console.log(reverseArray(["A", "B", "C", "D", "E", "F"]));而不是第二个变量:

arr[arr.length - i - 1]

答案 2 :(得分:0)

第一个函数的问题是,当您pop来自数组arr的元素时,它实际上减小了数组arr的长度。这就是为什么您看到的结果少于原始元素数量的原因。

所以您的代码就是这样

1st pass: i=0 and arr.length = 6; // 0<6 true
2nd pass: i=1 and arr.length = 5; // 1<5 true
3rd pass: i=2 and arr.length = 4; // 2<4 true
4th pass: i=3 and arr.length = 3; // 3<3 false and it does not execute

所以您只会看到三个结果。

答案 3 :(得分:0)

let input = ["A", "B", "C", "D", "E", "F"];
let output = [];

for(let i = 1; i <= input.length; i++) {

    // determine correct array index in respect to the current iteration
    let index = input.length - i;

    // push to new array
    output.push(reverse[index]);
}

// verify result
console.log(output);

答案 4 :(得分:-1)

您可以尝试使用以下代码:

function reverseString(str) {
    var newString = "";
    for (var i = str.length - 1; i >= 0; i--) {
       newString += str[i];
    }

    return newString;
}