收藏
回答

这是小程序的排序Bug吗

问题模块
API和组件

数组中元素超过10个,出现排序错误?


var arr = ["9", "8", "7", "b", "6", "5", "a","4", "3", "2", "1"]

for(var i=0;i<arr.length;i++){

    console.log(arr[i]);

};

console.log("---------------");

    arr.sort(function so(a, b) {

return a>b;

});

for (var i = 0; i < arr.length; i++) {

    console.log(arr[i]);

};


输出结果:

 9

 8

 7

 b

 6

 5

 a

 4

 3

 2

 1

 ---------------

 5

 1

 2

 3

 4

 6

 7

 8

 9

 a

 b


最后一次编辑于  2017-11-23
回答关注问题邀请回答
收藏

7 个回答

  • 明月刀
    明月刀
    2017-11-23

    强! 如法搞定。

    2017-11-23
    赞同
    回复
  • 细心
    细心
    2017-11-23

    function bubbleSort(a, fn) {

    for (var i = a.length - 1; i >= 1; i--)

    for (var j = 0; j < i; j++)

    if (fn(a[j], a[j + 1]))

    swapArray(a, j, j + 1);

    return a;

    }



    function selectionSort(a, fn) {

    for (var i = a.length - 1; i >= 1; i--) {

    var pos = i;

    for (var j = 0; j < i; j++)

    if (fn(a[j], a[pos]))

    pos = j;

    if (i != pos)

    swapArray(a, i, pos);

    }

    return a;

    }


    function swapArray(a, i1, i2) {

    [a[i1], a[i2]] = [a[i2], a[i1]];

    }


    function isFn(obj) {

    return typeof obj === 'function';

    }

    function mysort(arr, fn) {

    return selectionSort(arr, isFn(fn) ? fn : (a, b) => a > b);

    }


    module.exports = mysort;



    页面引用

    var mysort = require('../../sort.js')


    a= mysort(aa, (x, y) => x.aa> y.aa);

    var a= a[0]


    2017-11-23
    赞同
    回复
  • 细心
    细心
    2017-11-23

    你可以百度一下  V8 sort  百度上有很多。

    2017-11-23
    赞同
    回复
  • 明月刀
    明月刀
    2017-11-23

    “超过十个是V8底层的bug,这个bug很多年了”

    是这样啊,悲剧!



    2017-11-23
    赞同
    回复
  • 明月刀
    明月刀
    2017-11-23
    arr.sort(function(a, b) {
      return isNaN(a - b) ? (a > b) : (a - b)
    })

    这个方法只在我这个示例中有作用,我的元素类型实际为

     {

                    "shopCode": "017f55d2800348e69374f38571cfe9c0",

                    "shopName": "NEELLY 纳俪",

                }

    排序还是错误。




    2017-11-23
    赞同
    回复
  • 细心
    细心
    2017-11-23

    超过十个是V8底层的bug,这个bug很多年了,一直没有修复。

    Chrome上看的到,Firefox就没有,需要自己写一个排序方法。

    2017-11-23
    赞同
    回复
  • Albert Einstein [官]
    Albert Einstein [官]
    2017-11-23

    可使用以下方法


    arr.sort(function(a, b) {
      return isNaN(a - b) ? (a > b) : (a - b)
    })


    2017-11-23
    赞同
    回复