我创建了一个简单的 forEach
函数,我试图理解为什么当我使用 myArray
运行它时,它不会改变数组,即使我运行 element*2
。
function forEach(array, callback) {
for (var i = 0; i < array.length; i++) {
callback(array[i],i,array)
};
}
var myArray = [1,2,3]
forEach(myArray,function(element){element*2})
console.log(myArray)///[1,2,3]
最佳答案
您必须在 for 循环中修改数组,如下所示:
function forEach(array, callback) {
for (var i = 0; i < array.length; i++) {
array[i] = callback(array[i],i,array)
};
}
var myArray = [1,2,3]
forEach(myArray,function(element){return element*2})
console.log(myArray)
正如我们在评论中讨论的那样,最好的方法是实现类似 map 功能的功能:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/map
function map(array, callback) {
var out = [];
for (var i = 0; i < array.length; i++) {
out.push(callback(array[i],i,array))
};
return out;
}
var myArray = [1,2,3]
var myOtherArray = map(myArray,function(element){return element*2})
console.log(myArray)
console.log(myOtherArray)
这样 myArray 没有被触及,你创建一个新的。这通常是最好的选择,但有时您可能想就地修改它,因为它很大或出于其他(好的?)原因。在这种情况下,您可以使用第一个选项。
关于javascript - forEach 不会改变我传入的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30127681/