# Array 相关
# 数组拍平
var arr = [1,2,[3,4,[5]]]
// flat 默认一层,使用Infinity
var flat1 = arr.flat(Infinity)
// 递归
function fn1(arr){
// 或者使用instaceof
if(!Array.isArray(arr)) return;
let arr1 = []
arr.forEach((item) => {
if(Array.isArray(item)){
// arr1.push(...fn1(item))
arr1 = arr1.concat(fn1(item))
}else{
arr1.push(item)
}
})
return arr1
}
var flat2 = fn1(arr)
// reduce 实现
function fn2(arr){
if(Object.prototype.toString.call(arr) != "[object Array]"){return false};
return arr.reduce((pre,cur) => pre.concat(Array.isArray(cur)?fn2(cur):cur),[])
}
var flat3 = fn2(arr)
// toString + split,数组元素限制为纯字符串、纯数字
var flat4 = arr.toString().split(',').map(item => +item)
// join+split
var flat5 = arr.join().split('')
# 区分是对象还是数组
var arr = []
// instanceof 基于原型链
arr instanceof Array
// toString
Object.prototype.toString.call(arr) === "[object Array]"
// Array.isArray(arr)
Array.isArray(arr)
// isPrototypeOf
Array.prototype.isPrototypeOf(arr)