无题
创建:2022-01-10 12:31 更新:2022-09-06 18:59
Express 官网
swiper 官网
ElementUI 官网
json-server GitHub
node.js
vue获取数据在哪个周期函数
生命周期 vue-router和location.herf区别
vue-router有哪几种导航钩子
计算属性computed 侦听属性watch
flex属性是flex-grow,flex-shrink和flex-basis的简写,默认值为0 1 auto。后两个属性可选
js循环
webpack优化,配置
异步组件 应用
双向数据绑定实现
子父孙兄弟组件传值,子父组件产生和销毁顺序, props $emit
vm.$refs ref标记
插槽slot
vuex:组件-》actions-》mutations-》state
var和let:var的问题(1.变量提升;2.变量覆盖;3.没有块级作用域) const:定义的值在栈内存的地址是固定的
闭包
解构赋值 let a=1;let b=2;[a,b]=[b,a];//a=2 b=1
无限层级树转换
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},
]
function arrayToTree(items) {
const result = []; // 存放结果集
const itemMap = {}; //对应关系集
for (const item of items) {
const id = item.id;
const pid = item.pid;
//将对应关系集中,对应id自身的信息更新,并将之前保存的children信息存储下来
itemMap[item.id] = {
...item,
children:(itemMap?.[item.id]?.children)??[]//可选链+空值合并
};
//浅拷贝 直接将itemMap的栈内存地址赋值给treeItem
const treeItem = itemMap[id];
//判断是否为顶层,是顶层则添加到结果集里
if (pid === 0) {
result.push(treeItem);
} else {
/*
如果不是顶层,则将数据添加到对应关系集里
由于treeItem是浅拷贝,这里将数据添加到itemMap中,会直接影响到结果集
*/
if (!itemMap[pid]) {
//关系集中不存在,则赋值为空
itemMap[pid] = {
children: [],
}
}
itemMap[pid].children.push(treeItem)
}
}
return result;
}
console.log(arrayToTree(arr));
var length = 100;
function f1(){
console.log(this) //this指向windows
console.log(this.length);
}
var obj = {
x:10,
f2:function(f1){
f1();
arguments[0]() //this指向arguments
}
}
obj.f2(f1,2,2,2)
//结果 100 4
let ajax1 = new XMLHttpRequest();
ajax1.open("GET","https://qxr.3chaas.com/userCenter/tennat/loadInfo",true);
ajax1.onreadystatechange = function(){
if(ajax1.readyState == 4){
let res = JSON.parse(ajax1.responseText);
console.log(JSON.parse(res.data));
}
}
ajax1.send();