/*
map : 不改变原数组,返回一个新数组,新数组的长度与云数组长度相等
于forEach相比,就是放回一个新数组,是一个用来记录回调函数对原数组的操作后的映射数组
*/
let arrMap = [{a:2},2,3 ,4,5,6,7,8,{a:1}]
function arrayMap(arr , func){
if(!arr || arr.constructor !== Array) throw new TypeError(arr + 'is not an Array')
if(!func || typeof func !== 'functio') throw new TypeError(func + 'is not a functio')
let newArray = []
for(let i =0; i< arr.length ;i++){
if(i in arr) newArray[i] = fn(arr[i] , i , arr)
}
return newArray
}
/*
Object.assign({} , itm) 对象的复制,第一个元素是定义的新对象,第二个元素开始是要复制的对象
新旧对象最外层的引用地址是不相同的,但是内层的引用地址相同
*/
// 数组的复制
let arr1 = Object.assign([] , arrMap)
let arr2 = arrMap.slice()
let arr3 = arrMap.concat()
// arr1[0].a = 10 // 以上都是浅复制引用类型的元素,任意一个修改其他的也都跟着改
let arr4 = arrMap.map((itm) => {
return Object.assign({} , itm)
})
arr1[0].a = 10
console.log(arrMap,arr4,'arr4的值不受影响' , '28' , arr1)
// map一般涌来对整个数组映射,过滤不太好使
let arr5= arrMap.map((itm) => {
if(itm === 3) return itm
})
console.log(arr5) //[undefined, undefined, 3, undefined, undefined, undefined, undefined, undefined, undefined] 在map中,对应每次元素执行func操作的时候,不满足的不返回,这样默认返回undefined
// 返回的新数组的长度一定等于元素组的
数组重构-Map
最新推荐文章于 2025-05-04 18:28:34 发布