收藏
回答

在小程序框架里使用原生sort有排序错乱问题

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 Bug js原生sort方法 客户端 7.0.3 2.7.0

- 当前 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时,排序后返回的顺序是按排序前的顺序。。


最后一次编辑于  2019-05-21
回答关注问题邀请回答
收藏

1 个回答

  • 微盟
    微盟
    2019-05-21
            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
                }
            })



    2019-05-21
    有用
    回复 1
    • 2019-05-21

      谢谢!之前不清楚小程序里会发生不一样的结果,这次出现问题了排查才知道有这个问题,我可以用其它方式解决这类业务问题的。

      2019-05-21
      回复
登录 后发表内容