一个很变态的业务需求

今天一个业务在测试项目的时候要求省的排序按照字母排序,很变态,已经提供了搜索,还提出这样无理的要求,不过谁叫人家是老板,没办法,只能乖乖的想怎么改了

一开始想着后端改改就行,不过为了验证自己,还是需要自己搞个骚操作的

测试数据

1
2
3
4
5
6
7
8
9
10
11
let tmp = [
{name:'aq',age:1},
{name:'aqwe',age:1},
{name:'qwea',age:1},
{name:'aqwe',age:1},
{name:'xdfs',age:1},
{name:'hrt',age:1},
{name:'sfsd',age:1},
{name:'sdsdffa',age:1},
{name:'xv',age:1},
]

解法1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
tmp = tmp
.map(i => i.name) // 获取字符串数组
.sort() // 对字符串数组排序
.map(i => ({ ...tmp.find(a => i === a.name) })) // 按排序结果获取新的数组
.filter(i => i.name) // 过滤空的值

# 0: {name: "aq", age: 1}
# 1: {name: "aqwe", age: 1}
# 2: {name: "aqwe", age: 1}
# 3: {name: "hrt", age: 1}
# 4: {name: "qwea", age: 1}
# 5: {name: "sdsdffa", age: 1}
# 6: {name: "sfsd", age: 1}
# 7: {name: "xdfs", age: 1}
# 8: {name: "xv", age: 1}

解法2

我在测试sort()的传入函数返回参的时候发现它竟然返回的是正数和负数,而不是布尔值,很变态 也不知道我的这个方法是不是符合规范的,还是投机取巧了

1
2
3
4
5
6
7
8
9
10
11
tmp = tmp.sort((a, b) => ([a.name, b.name].toString() === [a.name, b.name].sort().toString() ? -1 : 1))

# 0: {name: "aq", age: 1}
# 1: {name: "aqwe", age: 1}
# 2: {name: "aqwe", age: 1}
# 3: {name: "hrt", age: 1}
# 4: {name: "qwea", age: 1}
# 5: {name: "sdsdffa", age: 1}
# 6: {name: "sfsd", age: 1}
# 7: {name: "xdfs", age: 1}
# 8: {name: "xv", age: 1}

写的方法不一定完美,有更好的实现请邮winnerwly@qq.com,欢迎相互交流