关于递归,算法当中基础中的基础,掌握不好,一切算法都是0.
以下是几个递归,在理解当中记忆,记录它们重在理解,不在记忆。
1、多维数组打成map映射。
const buildMapDataSource = (
dataSource,
target = {},
level = 1,
parentKey = null,
) => {
for (let i = 0; i
2、多维数组,每项打入key,表示层级,类似key=’0-0-0-1′.
buildStandardArr = (data, parentId = null, parentKey = null) => {
const result = [];
data.forEach((item, index) => {
if (item.parentId === parentId) {
const key = parentKey !== null ? `${parentKey}-${index}` : `${index}`;
const newItem = { ...item, key };
if (Array.isArray(item?.children) && item.children.length) {
const children = buildStandardArr(item.children, item.id, key);
if (Array.isArray(children) && children.length) {
newItem.children = children;
}
}
result.push(newItem);
}
});
return result;
}
3、把一维打成tree多维,个人觉得这个比较难理解;
const buildMultipleArr = (data, parentId = null) => {
const result = [];
data.forEach(item => {
if (item.parentId === parentId) {
const children = buildMultipleArr(data, item.id);
const newItem = { ...item };
if (Array.isArray(children) && children.length) {
newItem.children = children;
}
result.push(newItem);
}
});
return result;
};
4、通过parentId获取parent
const getParent = (data, parentId = null, parent = null) => {
for (let i = 0; i
解释获取parent算法:
当子集满足条件
if (item.parentId === parentId) {
return parent;
}
将会提前跳出子集内部的for循环getParent,同时父级的for循环也会提前跳出。
5、对多维数组,内部的节点排序
const sortNodes = (data) => {
data.sort((a, b) => a.sort - b.sort)
data.forEach(item => {
if (Array.isArray(item?.children) && item.children.length) {
sortNodes(item.children);
}
});
return data;
}
6、获取多维数组,某一项Item内部(有多层children嵌套)最大的层级
const getMaxLevel = (obj) => {
let maxLevel = 0;
function traverse(node, level) {
if (level > maxLevel) {
maxLevel = level;
}
if (Array.isArray(node.children)) {
node.children.forEach(child => {
traverse(child, child.level);
});
}
}
traverse(obj, obj.level);
return maxLevel;
}
从上面的例子来看
需要数组push的,都是先写递归函数,再写push追加的内容
需要返回一个object的,都是先写逻辑,再写递归函数
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
相关推荐: Android开发核心知识点梳理,25~40岁程序员进阶必备
1. Android的过去、现在和未来 在我的记忆中,早在2011年就有言论说Android系统要完蛋,时过9年后,Android系统仍旧坚挺。 现在Android已经广泛的应用在手机、平板、车联网、物联网、智能电视等等领域,是名副其实的终端霸主。且Andro…