°懵少女 2022-05-04 13:55:21
回溯解决
var entry = {
a: {
b: {
c: {
dd: 'abcdd'
}
},
d: {
xx: 'adxx'
},
e: 'ae'
}
}
function trans(obj) {
const result = {};
for (let k in obj) {
backtrace([k])
}
function backtrace(trace) {
let o = obj;
for (let i = 0; i < trace.length; i++) {
o = o[trace[i]]
}
if (typeof o !== 'object') {
result[trace.join(',')] = o;
return;
}
for (let k in o) {
trace.push(k);
backtrace(trace);
trace.pop();
}
}
return result;
}
console.log(trans(entry))
°懵少女 2022-04-30 19:32:37
@qiangzi7723 文章里其实已经写了,如果希望更多阅读,可以参考:
为什么一次循环里比较 4 个 vnode?但你可以看到如果 isSameVnode
通过才会处理相应的两个 vnode,然后进入下次循环:
isSameVnode
判断通过说明是新旧队列里的相同的 vnode,当然要做移动/更新处理。- 一次虽然 4 个 vnode 俩俩比较,但最终只处理一对 vnode,对不对?
- 如果
isSameVnode
判断都没通过,其实只处理newStartVnode
,要么从旧队列里找到它对应的 vnode 做更新处理,找不到则当作新插入的 vnode 处理。
所以整体逻辑是清晰的。
- 共 1 页
- 1
model.value = value; 这一行代码是不是不需要写
第 74 题: 使用 JavaScript Proxy 实现简单的数据绑定