首页 > 解决方案 > 如何使用 forEach-Loop 将数组的内容转为另一个数组?

问题描述

我想知道我的代码有什么问题。如标题中所述,我想将带有 for 循环的数组的内容转到另一个数组。我想为此使用 ES5,因为我还不习惯 ES6+。

这是我的代码:

    var arrayA = ["h","e","l","l","o"];
    var arrayB = [];
     function copyArray(oldArray, newArray) {
       oldArray.forEach(function() {
            var storeElement = oldArray.pop();
           newArray.push(storeElement); 
     });
       console.log(oldArray + " old array");
       console.log(newArray + " new array");
    }
    
    
    copyArray(arrayA, arrayB);

结果是:

"h,e,l,l old array"
"o new array"
"h,e,l old array"
"o,l new array"
"h,e old array"
"o,l,l new array"
"h,e FINAL old array"
"o,l,l FINAL new array"

但它应该是:

"" FINAL old array
"o, l, l, e, h" FINAL new array. 

出了什么问题?

标签: javascriptarraysforeachecmascript-5

解决方案


好的,所以问题是您forEach的平均运行oldArray length次数为 5 次 为什么会发生这种情况?这是因为您正在弹出forEach 改变长度和数据的值forEach

console.log(oldArray);您可以通过输入来检查forEach

var arrayA = ["h", "e", "l", "l", "o"];
var arrayB = [];

function copyArray(oldArray, newArray) {
    var length = oldArray.length;
    for (var i = 0; i < length; i++) {
        var storeElement = oldArray.pop();
        newArray.push(storeElement);
    };
    console.log(oldArray + " old array");
    console.log(newArray + " new array");
}


copyArray(arrayA, arrayB);


var reverseArray = ["h", "e", "l", "l", "o"].reverse();

console.log("reverse array");

console.log(reverseArray);


推荐阅读