- 当前 Bug 的表现(可附上截图)
- 预期表现
- 复现路径
- 提供一个最简复现 Demo
var sortValue = -1
var sortArr = [
{value: 1},
{value: 2},
{value: 3},
{value: 4},
{value: 5},
{value: 6},
{value: 7},
{value: 8},
{value: 9},
{value: 10},
{value: 11},
{value: 12},
{value: 13},
{value: 14}
].map(m => {
m.seqSort = 0
if (m.value === sortValue) {
m.seqSort = 1
}
return m
}).sort((a, b) => b.seqSort - a.seqSort)
console.log(sortArr)
上面代码片段在小程序框架里排序会错乱,按正常来说,seqSort都为0时,排序后返回的顺序是按排序前的顺序。。
var
sortValue = -1
var
sortArr = [
{value: 1},
{value: 2},
{value: 3},
{value: 4},
{value: 5},
{value: 6},
{value: 7},
{value: 8},
{value: 9},
{value: 10},
{value: 11},
{value: 12},
{value: 13},
{value: 14}
].map(m => {
m.seqSort = 0
if
(m.value === sortValue) {
m.seqSort = 1
}
return
m
}).sort((a, b) =>{
console.log(a,b)
})
执行这段代码,在小程序中和在最新版本的Chrome浏览器中,发现两者的执行顺序是不同的。Chrome的方式更优一些。
在Chrome中:
在小程序中:
如果在小程序中,因为业务场景需要获得在seqSort相等的情况下,按value排序,你可以这样写
var
sortValue = -1
var
sortArr = [
{value: 1},
{value: 2},
{value: 3},
{value: 4},
{value: 5},
{value: 6},
{value: 7},
{value: 8},
{value: 9},
{value: 10},
{value: 11},
{value: 12},
{value: 13},
{value: 14}
].map(m => {
m.seqSort = 0
if
(m.value === sortValue) {
m.seqSort = 1
}
return
m
}).sort((a, b) =>{
if
(a.seqSort == b.seqSort){
return
a.value - b.value
}
else
{
return
b.seqSort - a.seqSort
}
})
谢谢!之前不清楚小程序里会发生不一样的结果,这次出现问题了排查才知道有这个问题,我可以用其它方式解决这类业务问题的。