Skip to content

数组去重与扁平化

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))