cookie
, localStorage
, sessionStorage
的应用场景/^[\w\.]+@\w+\.com$/
全程问我实习经历和过去项目做了什么, 而且是翻来覆去地重复问, 一个小时的时间内我已经说得块口干舌燥了, 他一句我十句的那种...
最后只问了一道经典的前端手撕代码题, 这道题在我 21 年 10 月面试字节北京国际化电商的时候也遇到过:
// 给定如下数据:
const items = [
{ id: 2, parentId: null },
{ id: 1, parentId: 2 },
{ id: 4, parentId: 1 },
{ id: 5, parentId: 1 },
{ id: 3, parentId: 2 },
{ id: 6, parentId: 3 }
];
创建出上述数据对应的树形结构, 这里给一个潦草的简易实现吧:
// 获取根节点
const getRootItem = items => {
const rootItem = items.find(({ parentId }) => parentId === null);
if (!rootItem) {
throw new Error('传入的数据中无根节点');
}
return rootItem;
}
// 获取每个节点对应其有哪些子节点的 Map 结构
const getChildrenMap = items => items.reduce((map, curItem) => {
const { parentId } = curItem;
if (map[parentId]) {
map[parentId].push(curItem);
} else {
map[parentId] = [curItem];
}
return map;
}, {});
function TreeNode({ id, parentId }, arr, childrenMap) {
this.id = id;
this.parentId = parentId;
this.children = childrenMap[id]?.map(i => new TreeNode(i, arr, childrenMap));
}
function createTree(arr) {
const childrenMap = getChildrenMap(arr);
const rootItem = getRootItem(arr);
return new TreeNode(rootItem, arr, childrenMap);
}
// 执行:
(function main() {
const tree = createTree(items);
console.log(JSON.stringify(tree));
})();