求大佬们优化一下代码,屎山代码给孩子头皮想破了

2021-06-18 15:57:53 +08:00
 happyCodings
秉着不写垃圾代码的原则,求大佬优化一下,最优值奉上红包
需求是这样的:

万恶后端传过来的数据:
"data":[{"province":"上海市","city":"上海市市辖区","adcode":"310118","district":"青浦区"},
{"province":"江苏","city":"苏州市","adcode":"320506","district":"吴中区"},
{"province":"山西省","city":"阳泉市","adcode":"140302","district":"城区"},
{"province":"上海市","city":"上海市市辖区","adcode":"310101","district":"黄浦区"},
{"province":"河北省","city":"石家庄市","adcode":"130123","district":"正定县"}]

需要整合成这样 elementUi 中级联选择器中的数据:
(只要有相同的就要去重并在之前的 children 下加入重复的 children )
addressOptions: [
{
value: "zhinan",
label: "指南",
children: [
{
value: "shejiyuanze",
label: "设计原则",
children: [
{
value: "yizhi",
label: "一致",
},
{
value: "fankui",
label: "反馈",
},
{
value: "xiaolv",
label: "效率",
},
{
value: "kekong",
label: "可控",
},
],
},
{
value: "daohang",
label: "导航",
children: [
{
value: "cexiangdaohang",
label: "侧向导航",
},
{
value: "dingbudaohang",
label: "顶部导航",
},
],
},
],
},
],

我的垃圾代码:

dealWithAddressList(arr, name) {
var city = {};
return arr.reduce(function (item, ele) {
console.log(ele[name]);
if (city[ele[name]]) {
item.forEach((eles) => {
if (eles.label == ele[name]) {
eles.children.forEach((eless) => {
if (eless.value == ele.city) {
eless.children.push({
value: ele.adcode,
label: ele.district,
});
} else {
eles.children.push({
value: ele.city,
label: ele.city,
children: [
{
value: ele.adcode,
label: ele.district,
},
],
});
}
});
}
});
console.log(city[ele[name]]);
} else {
city[ele[name]] =
true &&
item.push({
value: ele.province,
label: ele.province,
children: [
{
value: ele.city,
label: ele.city,
children: [
{
value: ele.adcode,
label: ele.district,
},
],
},
],
});
}
console.log(item);
return item;
}, []);
},

求大佬优化一下,可以的话有红包奉上
7931 次点击
所在节点    Vue.js
60 条回复
victor
2021-06-19 10:09:00 +08:00
先甩锅给后端,再来个红包钓鱼
fewok
2021-06-19 10:30:58 +08:00
就这,什么玩意
ianva
2021-06-19 11:31:31 +08:00
思路就是错的,代码写的再好也是屎山

接口和 组件 porps 的变化怎么隔离?不隔离接口一变,你代码也跟着变?组件换了这套代码再来一遍?一个需求变化就得重写的东西

另外一个 map 数据的代码有啥值得优化的,明确输入和输出就完了,你代码是屎,别人要重构只了解输入和输出不看你逻辑就行了
opengps
2021-06-19 11:33:52 +08:00
怪不得前后端互相吐槽,这完全是各自都能处理的,除非这个接口是唯一用途可以后端去修改,否则宁肯提供多个也不应该修改输出结构,因为这种改法不符合开闭原则,是个新老不兼容的改动。前端是 web 还好,前端如果是 app,客户不升级停留在老版本岂不是必须强制下升级了
ianva
2021-06-19 11:43:06 +08:00
@opengps web 端可以在前端建模隔离接口变化,至于客户端更新的问题,在 BFF 建模隔离接口变化,当然都走 GraphQL 是最方便的
anguiao
2021-06-19 13:08:14 +08:00
这帖子根本不想看,代码可读性太低了🤣
CokeMine
2021-06-19 14:41:41 +08:00
ganning
2021-06-19 15:12:24 +08:00
@HashV2 哈哈哈哈,大佬
LinHoo
2021-06-19 19:17:41 +08:00
const convert = data => {
const options = []
const proviceMap = {}
data.forEach(item => {
// 没有省
if (!proviceMap[item.province]) {
proviceMap[item.province] = {
index: options.length,
citys: [item.city]
}
options.push({
value: item.province,
label: item.province,
children: [
{
value: item.city,
label: item.city,
children: [
{
value: item.adcode,
label: item.district,
}
]
}
]
})
return
}

const provinceIndex = proviceMap[item.province].index
const cityIndex = proviceMap[item.province].citys.indexOf(item.city)
// 没有市
if (cityIndex === -1) {
options[provinceIndex].children.push({
value: item.city,
label: item.city,
children: [
{
value: item.adcode,
label: item.district,
}
]
})
return
}
// 有省有市
options[provinceIndex].children[cityIndex].children.push({
value: item.adcode,
label: item.district,
})
})
}
DeWjjj
2021-06-20 08:32:54 +08:00
个人认为这个后端出的结构代码没问题,自己解析。
这层级算套的不错的了。
happyCodings
2021-06-20 22:09:59 +08:00
@coderJie 大佬我说我写的是 可能表述不清晰
happyCodings
2021-06-20 22:13:27 +08:00
@meshell 大佬们统一回复一下 是我自己写的代码像屎山,然后想优化一下,实力原因来求助
ps:刚毕业的前端小码农
谢谢大佬们
happyCodings
2021-06-20 22:13:35 +08:00
@aguesuka 谢谢大佬
happyCodings
2021-06-20 22:13:57 +08:00
@ccraohng 谢谢大佬
happyCodings
2021-06-20 22:14:06 +08:00
@ryncv 谢谢大佬
happyCodings
2021-06-20 22:14:16 +08:00
@timedivision 谢谢大佬
happyCodings
2021-06-20 22:15:15 +08:00
@CokeMine 谢谢大佬
happyCodings
2021-06-20 22:15:29 +08:00
@LinHoo 谢谢大佬
vueli
2021-06-21 10:05:34 +08:00
为什么不写在。``` ``` 里面, 看着好难受. 又懒不想拿过来运行格式化
Cy1
2021-06-21 11:08:27 +08:00
后端这格式不是很合理么,真就什么数据都处理好,前端直接套才算合理么?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/784284

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX