每天都成长一点系列(一)
今天同事咨询了我这样一个问题
有俩个下拉选项 有关联性的 意思就是a下拉不选 b下拉也选不了 然后提交的时候 如果a、b都选了 就向后台传a_b 如果b没选 就向后台传a 都没选 就向后台传null 并附上代码 让我认为对错或者有没有更优的写法
代码如下
`
let a = 'a'
let b = 'b'
const id = b ? a + '_' + b : a ? a : null
`
首先 这样写是没问题的 但是可读性就狠差 甚至我觉得都不如用if else来的更直观 于是我加以改进
代码如下
`
const id = (a && b) ? a + '_' + b : (a || null)
`
实话 我个人认为我这样写可读性能稍微好一丢丢 勉强算改进
但是 上述俩种写法都面临着一个严重的问题 就是可扩展性都太差 譬如又多了一个下拉选择 那么 对于上述的俩种写法都是致命的打击 所以 有没有更优的写法呢 答案当然是有
代码如下
`
let c = 'c'
const id = [a, b, c].reduce((id, item, index) => {
if (item) {
id = id ? id + '_' + item : item
}
return id
}, '') || null
`
这是我暂时能想到的最优的写法 优点在于 就算再增加下拉选择 譬如c 也不需要改动原有的代码 还有 就是如果下拉选项变成非关联性的 也是不需要改动代码的
比较气的是 同事并没有采纳 原因是 拼个id需要写个方法? 其实 我觉得真的有必要 正所谓前人栽树后人乘凉 不然真的要被后人骂的 所以说该勤快的地方还是要勤快的 需要多考虑的地方也是应该多考虑的 这是对后人的负责 也是对自己的负责 当然还能自我提高 何乐而不为!!!(这代码怎么粘成这个鬼样子)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。