<script>
const arr = [1, [ 2, [ 3 , [ 4 , 5 ]]], 6] //=> [1, 2, 3, 4, 5, 6]
/*
方法一、使用flat()
*/
let arr1 = arr.flat(Infinity)
// console.log(arr1)
/*
方法二、递归
*/
let res = []
let fn = (arr)=>{
for(let i = 0; i< arr.length; i++){
if(Object.prototype.toString.call(arr[i]) === '[object Array]'){
fn(arr[i])
}else {
res.push(arr[i])
}
}
}
fn(arr)
// console.log(res)
/*
方法三、数组reduce
- arr 表示操作的原数组
- prev 表示上一次调用回调时的返回值, 或者初始值 init
- cur 表示当前正在处理的数组元素
- index 表示当前正在处理的数组元素的索引,若提供init值, 则索引为0, 否则索引为1
- init 表示初始值
*/
// reduce: 多维数组转为一维数组
let arr2 = (arr) => {
return arr.reduce((pre, cur)=>{
return pre.concat(Array.isArray(cur) ? arr2(cur) : cur)
}, [])
}
// console.log(arr2(arr))
// reduce 求和
let arrTest = [ 1, 2, 3, 4]
let sum = arrTest.reduce((pre, cur) =>{
return pre + cur
}, 2)
// console.log(sum)
// reduce 计算数组中每个元素出现的次数
let person = ['张曼玉', '刘嘉玲', '梅艳芳', '关之琳', '杨幂', '杨幂']
let nameNum = person.reduce((pre, cur)=>{
if(cur in pre){
pre[cur]++
}else {
pre[cur] = 1
}
return pre
}, {})
console.log(nameNum)
// reduce 数组去重
let repeat = [1, 1, 2, 3, 4, 4, 5, 4, 1, 3]
let repeatArr = repeat.reduce((pre, cur) => {
if(!pre.includes(cur)){
return pre.concat(cur)
}else {
return pre
}
}, [])
console.log(repeatArr)
</script>