跟我一起来刷题(2)——递归&深度拷贝&扁平化数组

202 阅读1分钟

递归

递归函数的核心是自己调自己;

实现递归的两个核心:

  • 找到规律(可以最小粒度去分析一下规律,规律是抽离出重复相关的粒度;)

  • 找到结束条件;

深度拷贝

简化版本,初步判断是否是对象类型,如果是对象类型;再去递归对象内部属性;

function deepCopy(obj) {
    if(typeof obj !== 'object') return obj;
    const newObj = obj instanceof 'Array' ? [] : {};
    for(const key in obj) {
        if(obj.hasOwnProperty(key)) {
            newObj[key]  == typeof obj[key] === 'object' ? deepCopy(obj[key]) : obj[key];
        }
    }
    return newObj;
}

扁平化数组&去除重复的元素&升序排序

var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10];

拍平数组

const flagArr = function(arr) {
    let newArr = [];
    arr.forEach((item,index,arr) => {
        if(Array.isArray(item)) {
            newArr = newArr.concat(flagArr(item));
        } else {
            newArr.push(item);
        }        
    })
    return newArr;
}

去重函数

const unique = function(arr) {
    return Array.from(new Set(arr));
}

升序排序

const sort = (a, b) => a - b;

实现;

console.log(unique(flagArr(arr)).sort(sort))
// [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14];