diff --git a/sunyang.html b/sunyang.html new file mode 100644 index 0000000000000000000000000000000000000000..c128188382704a524eb105ca361ce3d988f13218 --- /dev/null +++ b/sunyang.html @@ -0,0 +1,244 @@ + + + + + + 原生轮播图 + + + + + + + + diff --git a/sunyang.js b/sunyang.js new file mode 100644 index 0000000000000000000000000000000000000000..8329536d11c341077613794bafe51f032d28f8ad --- /dev/null +++ b/sunyang.js @@ -0,0 +1,173 @@ +const cityData = [ + { + parentValue: 1, + value: 11, + label: "北京市", + }, + { + parentValue: 11, + value: 111, + label: "东城区", + }, + { + parentValue: 11, + value: 112, + label: "西城区", + }, + { + parentValue: 1, + value: 12, + label: "上海市", + }, + { + parentValue: 12, + value: 121, + label: "黄浦区", + }, + { + parentValue: 12, + value: 122, + label: "徐汇区", + }, + { + parentValue: 1, + value: 13, + label: "广东省", + }, + { + parentValue: 13, + value: 131, + label: "广州市", + }, + { + parentValue: 131, + value: 1311, + label: "天河区", + }, + { + parentValue: 131, + value: 1312, + label: "越秀区", + }, + { + parentValue: 132, + value: 1321, + label: "南山区", + }, + { + parentValue: 132, + value: 1322, + label: "罗湖区", + }, + { + value: 1, + label: "中国", + }, + { + parentValue: 13, + value: 132, + label: "深圳市", + }, +]; + +/* * + 1.请利用递归方法实现一个函数,把上方数据递归成有层级的数据, + 2.把value字段变成id字段,label字段变成title字段,children字段变成child字段, + 3.去掉parentValue字段,最终得到以下数据。需要一模一样的数据 + ⚠️注意:不允许使用三层循环,请使用递归方法 + [ + { + id: 1, + title: '中国', + child: [ + { + id: 11, + title: '北京市', + child: [ + { + id: 111, + title: '东城区' + }, + { + id: 112, + title: '西城区' + } + ] + }, + { + id: 12, + title: '上海市', + child: [ + { + id: 121, + title: '黄浦区' + }, + { + id: 122, + title: '徐汇区' + } + ] + }, + { + id: 13, + title: '广东省', + child: [ + { + id: 131, + title: '广州市', + child: [ + { + id: 1311, + title: '天河区' + }, + { + id: 1312, + title: '越秀区' + } + ] + }, + { + id: 132, + title: '深圳市', + child: [ + { + id: 1321, + title: '南山区' + }, + { + id: 1322, + title: '罗湖区' + } + ] + } + ] + } + ] + } +] + * */ + +// 具体实现 +const getArea = (data, parentId = undefined) => { + return ( + data + // 先筛选出父级数据 + .filter((item) => item.parentValue === parentId) + .map((item) => { + const node = { + id: item.value, + title: item.label, + }; + + // 递归调用找出子级数据 + const children = getArea(data, item.value); + if (children.length) { + node.child = children; + } + + return node; + }) + ); +}; +const result = getArea(cityData); +console.log(JSON.stringify(result, null, 2));