这是小程序的排序Bug吗
发布于 6 年前 作者 tshen 8848 次浏览 来自 问答

数组中元素超过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

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

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

 {

                “shopCode”: “017f55d2800348e69374f38571cfe9c0”,

                “shopName”: “NEELLY 纳俪”,

            }

排序还是错误。

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]

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

强! 如法搞定。

可使用以下方法

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

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

是这样啊,悲剧!

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

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

回到顶部