手写深度比较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);