手写之flatten

88 阅读1分钟

不积跬步无以至千里

实现是否可遍历

function isFlattenable(value){
    return Array.isArray(value) || 
    Object.prototype.toString.call(value)==='[object Arguments]'|| 
    Boolean(value && value[Symbol.isConcatSpreadable])
}

实现 flatten

    function flatten(array){
        if(!isFlattenable(array)) return [];
        const result = [];
        for(let value of array){
            if(isFlattenable(value)){
              result.push(...flatten(value))
            }else{
                result.push(value)
            }
        }
        return result;
    }
    
   // flatten([[1,2,3],[23,232,2323121212,23]])
   // 结果--> [1, 2, 3, 23, 232, 2323121212, 23]

结束

1.学到新的知识点 Symbol.isConcatSpreadable 在Array.prototype.concat的时候是否将数组进行展开合并