数组和对象的遍历方法
数组的遍历方法(forEach、map、reduce、filter)
方法 描述 语法 返回新数组 参数函数需要return forEach arr.forEach(function(item,index,arr){}) 不返回数组 不需要 map 遍历数组并返回新数组 arr.map(function(item,index,arr){},参数1的this指向) 返回新数组 需要返回新数组的每一项 reduce 对数组进行条件统计 arr.reduce(function(上一轮的累加值,item,index,arr){},初始值) 不改变数组,返回统计的结果 返回每一项的统计值 filter 对数组中元素进行条件筛选,过滤掉不符合条件的项 arr.filter(function(item,index,arr){}) 返回新数组 返回条件项 some 只要数组中某项符合条件就返回true arr.filter(function(item,index,arr){}) 返回布尔值 返回条件项 every 数组中每一项都符合条件才返回true arr.filter(function(item,index,arr){}) 返回布尔值 返回条件项
对象的遍历方法
手写数组去重
用reduce实现数组去重
let arr = [ 1 , 3 , 2 , 5 , 1 , 7 , 4 , 5 ]
let res= arr. reduce ( ( prearr, item ) => {
return prearr. includes ( item) ? prearr: prearr. concat ( item)
} , [ ] )
手写数组扁平化
let arr = [ 1 , [ 3 , 2 ] , 5 , [ 1 , 7 , 4 ] , 5 ]
function flat ( arr ) {
let res= arr. reduce ( ( prearr, item ) => {
return prearr. concat ( Array. isArray ( item) ? flat ( item) : item)
} , [ ] )
return res;
}
console. log ( flat ( arr) ) ;
let arr = [ 1 , [ 3 , 2 ] , 5 , [ 1 , 7 , 4 ] , 5 ]
function flat ( arr ) {
let res = [ ]
arr. forEach ( item => {
if ( Array. isArray ( item) ) {
res= res. concat ( flat ( item) )
} else {
res = res. concat ( item)
}
} )
return res
}
用reduce实现map和filter
Array . prototype. map = function ( fn, thisArg ) {
return this . reduce ( ( pre, cur, index, arr ) => {
return pre. concat ( fn . call ( thisArg, cur, index, arr) )
} , [ ] )
}
Array . prototype. filter = function ( fn, thisArg ) {
return this . reduce ( ( pre, cur, index, arr ) => {
return pre. concat ( fn . call ( thisArg, cur, index, arr) )
} , [ ] )
}