手写深度比较isEqual等常用函数

169 阅读1分钟

手写深度比较isEqual

function isObject(obj){
    if(typeof obj!== 'object'|| obj === null){
        return false
    }
    return true;
}
function isEqual(obj1, obj2){
    // 边界条件
    if(!isObject(obj1) || !isObject(obj2)){
        return obj1 === obj2;
    }

    if(obj1 === obj2){
        return true
    }

    const obj1Keys = Object.keys(obj1);
    const obj2Keys = Object.keys(obj2);
    if(obj1Keys.length!== obj2Keys.length){
        return false;
    }

    for(let key in obj1){
       const res = isEqual(obj1[key], obj2[key]);
       // 递归 递下去有返回值才 归,归以后也要有返回值!!!
       if(!res){
           return false
       }
    }
    return true

}

isEqual({a: {name: 'mh'}},{a: {name: 'mh'}})

获取多个数字中的最大值

Math.max(10,30,40)
Math.max(...[10,30,40])

// 另外申请一个变量放最大值!!!!!
function max (){
    const nums = Array.prototype.slice.call(arguments)
    let max = 0;
    nums.forEach((num)=>{
        if(num>max){
            max = num;
        }
    })
    return max;
}

max(10,50,90,30)

数组去重

// 另外申请一个变量res 用于装新数据
function uniq(arr) {
    const res = [];
    arr.forEach((item)=>{
        if(res.indexOf(item)<0){
            res.push(item)
        }
    })
    return res;
}

uniq([10,10,10,40,7])
// 用set
function uniq(arr) {
   let set = new Set(arr);
   return [...set];
}

uniq([10,10,10,40,7])

平铺数组

function flat(arr){
    const isDeep = arr.some(item=> item instanceof Array)
    if(!isDeep){
        return arr;
    }
    console.log('arr',arr)
    const res = Array.prototype.concat.apply([], arr);
    return flat(res);
  
}
let cc = flat([1,2,3,[7,8]])

重组菜单

let arr = [
    {id: 1, name: '部门1', pid: 0},
    {id: 2, name: '部门2', pid: 1},
    {id: 3, name: '部门3', pid: 1},
    {id: 4, name: '部门4', pid: 3},
    {id: 5, name: '部门5', pid: 4},
]
// map
function toTree(items) {
    const map = {}
    for (const item of items) {
        map[item.id] = {
            ...item,
            children: []
        }
    }
    const result = [];
    for (const item of items) {
        const id = item.id;
        const pid = item.pid;
        const treeItem = map[id]
        if (map[item.pid]) {
            map[item.pid].children.push(item)
        } else {
            result.push(treeItem);
        }
    }
    return result;
}
const tree = toTree(arr)
console.log('tree,,,,', tree);

// 递归
// function findChildren(data, result, pid){
//   const length = data.length;
//   for(let i = 0; i < length; i++) {
//     if (arr[i].pid === pid) {
//         const newItem = {...arr[i], children: []};
//         result.push(newItem);
//         findChildren(data, newItem.children, arr[i].id)
//     }
//   }
// }
// const newMenus = [];
// findChildren(arr, newMenus, 0);
// console.log('newMenus,,,,,', newMenus);