定义和用法 map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。
这段话仍是比较绕口的,没动脑子的时候,意思就是返回一个新数组呗,结果某次用了map,原变量还没改呢,就发现结果变了,唉呀妈呀,可神奇了。
错误示范php
let arr = [{a:1,b:2},{a:2,b:3}]; let newArr = arr.map(v => { v.a += 1; v.b += '1'; return v }); console.log(arr); // [{a:2,b:'21'},{a:3,b:'31'}] console.log(newArr); // [{a:2,b:'21'},{a:3,b:'31'}]
随意感觉下,很崩溃。
分析 形成这个缘由是由于,他返回的数组,就是return了一个处理过的对象啊,那js的引用类型仍是毛变化都没有,那个改变(v),就等于改变了指向同一个地址的v,呵呵了。
那么知道为啥就好办了,首先想到的就是assign
Object.assign() 方法用于将全部可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。
其余的嘛,不加班的那一天再想吧。数组
let arr = [{a:1,b:2},{a:2,b:3}]; let newArr = arr.map(v => { let v1 = Object.assign({},v); v1.a += 1; v1.b += '1'; return v1 }); console.log(arr); // [{a:1,b:2},{a:2,b:3}] console.log(newArr); // [{a:2,b:'21'},{a:3,b:'31'}]
转载于猿2048:▶《基础!使用map返回一个新的数组要注意哦》函数