数组去重与扁平化
js
// 判断是否是数组
Array.isArray()
function _isArray(obj) {
return Object.prototype.toString.call(obj) === '[object Array]' // 记住要call!!!,返回的值前者均为开发小写的object,后者为类型
}
let arr = [1, 2, 3, 2, 1, 2, 3, 2, 1, 3, 3, 1, 1, 2, 4, [1, 3]]
console.log(_isArray(arr)) // true
arr instanceof Array // true
// uniq 去重
function uniq(arr) {
return arr.reduce((res, item) => {
// if(!res.includes(item)) res.push(item)
// return res
return res.includes(item) ? res : res.concat(item) // 只有一层用这个还ok
}, [])
}
console.log(uniq(arr))
// flat 扁平化
// arr.flat(Infinity)
function flat1(arr) {
return arr.reduce((res, item) => {
return res.concat(Array.isArray(item) ? flat1(item) : item)
}, [])
}
Array.isArray = function (arr) {
return Object.prototype.toString.call(arr) === '[object Array]'
}
function flat2(arr) {
while(arr.some(item => Array.isArray(item))) {
arr = [].concat(...arr) // 一层一层剥开
}
return arr
}
console.log(flat1(arr))
console.log(flat2(arr))