这段 if...else 有优雅的写法吗?

232 天前
 waiaan
    function onSortChange({ order, prop }) {
      let sortType = 0
      if (order === 'descending') {
        if (prop === 'thisYearIncome') {
          sortType = 1
        }
        if (prop === 'lastYearIncome') {
          sortType = 3
        }
        if (prop === 'rate') {
          sortType = 5
        }
      } else {
        if (prop === 'thisYearIncome') {
          sortType = 2
        }
        if (prop === 'lastYearIncome') {
          sortType = 4
        }
        if (prop === 'rate') {
          sortType = 6
        }
      }
      this.fetchData(sortType)
    }

谢谢。

8534 次点击
所在节点    JavaScript
76 条回复
foolnius
232 天前
@foolnius #17
"thisYearIncome: 3, //注释" => "thisYearIncome: 2, //注释"
makejohn2015
232 天前
function onSortChange({ order, prop }) {
const sortMap = {
thisYearIncome: { ascending: 2, descending: 1 },
lastYearIncome: { ascending: 4, descending: 3 },
rate: { ascending: 6, descending: 5 }
};

const sortType = sortMap[prop] ? sortMap[prop][order] : 0;
this.fetchData(sortType);
}
InkStone
232 天前
fetchData 的参数设计太烂了。这种设计字段一变动直接 gg 。排序这种场景就应该直接根据传入的字段动态生成 query 。
Track13
232 天前
function onSortChange({ order, prop }) {
const sortTypes = {
'thisYearIncome': {
ascending: 2,
descending: 1,
},
'lastYearIncome': {
ascending: 4,
descending: 3,
},
'rate': {
ascending: 6,
descending: 5,
},
};

const sortType = sortTypes[prop][order];
this.fetchData(sortType);
}
renmu
232 天前
我选择 switch
ChefIsAwesome
232 天前
不得不说,chatgpt 给的答案可读性强,易扩展,非常好。
Pencillll
232 天前
好像楼上都没有提到这种写法啊,感觉这样更清晰一些:

const sortTypes = {
1: { prop: "thisYearIncome", order: "descending" },
2: { prop: "thisYearIncome", order: "ascending" },
3: { prop: "lastYearIncome", order: "descending" },
4: { prop: "lastYearIncome", order: "ascending" },
5: { prop: "rate", order: "descending" },
6: { prop: "rate", order: "ascending" },
}

function getSortType({ order, prop }) {
for (const [sortType, condition] of Object.entries(sortTypes)) {
if (condition.order === order && condition.prop === prop) {
return sortType
}
}

return 0
}
qinxs
232 天前
如果 135 246 是固定的值

function onSortChange({ order, prop }) {
let sortType = 0
const sortMap = {
thisYearIncome: 1,
lastYearIncome: 3,
rate: 5,
}

sortType = sortMap[prop] || sortType
if (order !== 'descending' && sortMap.hasOwnProperty(prop)) {
sortType++
}
console.log(sortType)
// this.fetchData(sortType)
}
wildnode
232 天前
const sortTypeMap = {
descending: {
thisYearIncome: 1,
lastYearIncome: 3,
rate: 5
},
ascending: {
thisYearIncome: 2,
lastYearIncome: 4,
rate: 6
}
}

function onSortChange({ order, prop }) {
const sortType = sortTypeMap?.[order]?.[prop] ?? 0
this.fetchData(sortType)
}
ZnductR0MjHvjRQ3
232 天前
能否改成这样呢?
```js
function onSortChange({ order, prop }) {
let sortType = 0;
const data = {
descending: {
thisYearIncome: 1,
lastYearIncome: 3,
rate: 5,
},
default: {
thisYearIncome: 2,
lastYearIncome: 4,
rate: 6,
},
};
if (!data[order]) order = "default";
this.fetchData(data[order][prop]);
}

```
z1154505909
232 天前
def test(order,prop):
arr={
'descending':{
"thisYearIncome":1,
"lastYearIncome":3,
"rate":5
},
"thisYearIncome":2,
"lastYearIncome":4,
"rate":6
}

try:
return arr[order][prop]
except:
return arr[prop]
python 写法
sima675
232 天前
function onSortChange({ order, prop }) {
const sortMap = {
'thisYearIncome': {
'descending': 1,
'ascending': 2
},
'lastYearIncome': {
'descending': 3,
'ascending': 4
},
'rate': {
'descending': 5,
'ascending': 6
}
};

const sortType = sortMap[prop][order];
this.fetchData(sortType);
}
gpt 给的答案,看着还行
darkengine
232 天前
const arr = ['thisYearIncome', 'lastYearIncome', "rate']

return (arr.indexOf(prop) + 1) * 2 - (order==='descending'?1:0)


你这样写,看同事揍不揍就完了 😂
maigebaoer
232 天前
扔给 gpt 吧
wuyiccc
232 天前
order_prop 组成 map 的 key ,value 存放 sortType, 然后需要的时候根据 order_prop 这个 key 直接去 get 就可以了
secondwtq
232 天前
我怎么感觉如果这是 C/C++ 的代码的话,主楼原本的写法就挺好的 ...
Lax
231 天前
怀疑紧接着还有一段对应的代码:

function fetchData(sortType) {
let prop = null;
let order = null;

if(sortType === 1) {
prop = "thisYearIncome";
order = "descending";
}
if(sortType === 2) {
prop = "...";
order = "...";
}
if(sortType === 3) {
prop = "...";
order = "...";
}
if(sortType === 4) {
prop = "...";
order = "...";
}
if(sortType === 5) {
prop = "...";
order = "...";
}
if(sortType === 6) {
prop = "...";
order = "...";
}

// do something
}
cookii
231 天前
@darkengine 这么多答案我还是喜欢你这个
bidongliang
231 天前
@darkengine 果然找到了心目中的答案
lanlanye
231 天前
```javascript
class SortService {
getSortType(sort) {
const mapping = {
thisYearIncome: {
ascending: 2,
descending: 1,
},
lastYearIncome: {
ascending: 4,
descending: 3,
},
rate: {
ascending: 6,
descending: 5,
},
};
return mapping[sort.sortBy][sort.sortOrder];
}
}


function onSortChange({ order, prop }) {
const sort = new Sort(prop, order);
const sortType = new SortService().getSortType(sort);
this.fetchData(sortType);
}
```

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

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

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

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

© 2021 V2EX