map 不修改调用它的原数组本身(当然可以在 callback 执行时改变原数组)
var numbers = [1, 4, 9];
var roots = numbers.map(Math.sqrt);
// roots的值为[1, 2, 3], numbers的值仍为[1, 4, 9]
以上针对数组基本类型;
当数组中包含对象时,测试结果如下:
let tea = [1,2,{name:true}];
let arr4 = tea.map((it,id)=>{
if(id===2){
it.name = 'edit'
}
})
我们return 试一下:
let tea = [1,2,{name:true}];
let arr4 = tea.map((it,id)=>{
if(id===2){
return it.name = 'edit'
}
return it
})
如果直接return应该就可以带上属性名了:
let tea = [1,2,{name:true}];
let arr4 = tea.map((it,id)=>{
if (id===2) {
it.name = 'edit'
}
return it
})
当我们改变原数组对象中的属性值时,新数组的属性值也改变,相当于浅拷贝;
结论:map的使用场景(上面的例子演示了map返回后的结果是否赋值给一个新数组,实际上要用map最好是要有新的数组来接收返回值,filter之类的函数同理,否则用forEach会更合适些,当然在使用forEach时需要注意forEach循环是无法使用return, break之类的语句跳出的,如果需要使用break跳出循环,可以使用原生的 for语句 或者ES6的 for-of ):