例子:
var arr = ["one","two","three"];
arr.forEach(function(part){
part = "four";
return "four";
})
alert(arr);
数组仍然保留着它的原始值,有没有办法从迭代函数获得对数组元素的写入权限?
例子:
var arr = ["one","two","three"];
arr.forEach(function(part){
part = "four";
return "four";
})
alert(arr);
数组仍然保留着它的原始值,有没有办法从迭代函数获得对数组元素的写入权限?
回调被传递给元素、索引和数组本身.
arr.forEach(function(part, index, theArray) {
theArray[index] = "hello world";
});
edit-如注释中所述,.forEach()
函数可以接受第二个参数,该参数将在每次回调调用中用作this
的值:
arr.forEach(function(part, index) {
this[index] = "hello world";
}, arr); // use arr as this
第二个示例显示arr
本身在回调中被设置为this
.有人可能会认为.forEach()
调用中涉及的数组可能是this
的default值,但不管出于什么原因,它不是;如果不提供第二个参数,this
将是undefined
.
(注意:如果回调函数是=>
函数,则上述关于this
的内容不适用,因为在调用此类函数时,this
永远不会绑定到任何东西.)
同样重要的是要记住,在Array prototype上提供了一系列类似的实用程序,Stackoverflow上会弹出许多关于某个函数的问题,因此最好的解决方案就是 Select 不同的工具.你有:
forEach
用于对数组中的每个条目进行操作;filter
,用于产生仅包含合格条目的新数组;map
,用于通过变换现有数组来生成一对一的新数组;some
来判断数组中是否至少有一个元素符合某种描述;every
判断数组中的all个条目是否与描述匹配;find
,则在数组中查找值诸若此类.MDN link个