我创建了一个简单的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]
答案 0 :(得分:6)
您必须在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)
正如我们在评论中讨论的那样,最好的方法是实现地图功能: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没有被触及,你创建一个新的。这通常是最好的选择,但有时你可能想要在适当的位置修改它,因为它很大或者其他(好的?)原因。在这种情况下,您可以使用第一个选项。
答案 1 :(得分:4)
您应该分配新的数组元素值,因为基本类型(例如您的数字)是不可变的,因此element * 2
不会修改element
。
为了完成这项工作,你不应该触及你当前的forEach
实现,因为forEach
不应该从回调中返回值(这不是map)。在这种情况下,你应该这样做:
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, i, arr) {
arr[i] = element * 2;
});
document.write(JSON.stringify( myArray ));
答案 2 :(得分:1)
是的,答案不对。这个[片段]会这样做。
无论如何,在现代浏览器中,我们有REP
到availability
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} name=News&file=article&sid=60
RewriteRule ^phpnuke/modules\.php$ /? [L,R=301]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
Array.forEach
答案 3 :(得分:1)
这应该有效,明确指定变量。
function forEach(array, callback) {
for (var i = 0; i < array.length; i++) {
array[i] = callback(array[i])
};
}
var myArray = [1,2,3]
forEach(myArray,function(element){return element*2})
console.log(myArray)///[1,2,3]