Javascript Array.sort()

时间:2015-07-22 08:29:46

标签: javascript arrays sorting

我试图对一组整数升序进行排序。 为了理解sort-method的行为,我在回调函数中放了一个console.log:

var field = [50, 90, 1, 10, 2];

console.log(field.join(' | '));
var i = 0

field.sort(function(a, b) { 
    console.log(++i + 'a: ' + a + ', b: ' + b);

    if (a === b) {
        return 0;
    } else if (a > b) {
        return 1;
    } else {
        return -1;
    }                   
});

console.log(field.join(' | '));

console.log的结果:

PROTOKOLL: 50 | 90 | 1 | 10 | 2 
PROTOKOLL: 1 a: 90, b: 50 
PROTOKOLL: 2 a: 1, b: 90 
PROTOKOLL: 3 a: 1, b: 50 
PROTOKOLL: 4 a: 10, b: 90 
PROTOKOLL: 5 a: 10, b: 50 
PROTOKOLL: 6 a: 10, b: 1 
PROTOKOLL: 7 a: 2, b: 90 
PROTOKOLL: 8 a: 2, b: 10 
PROTOKOLL: 9 a: 2, b: 1 
PROTOKOLL: 1 | 2 | 10 | 50 | 90

毕竟我知道Array.sort()方法的结果应该是: a:50,b:90 ......但它是另一种方式。

任何人都可以解释一下吗?

2 个答案:

答案 0 :(得分:1)

就像这样。 总是拿第二个号码并检查它是否在正确的位置:

图表:

setdefault

这是继续这样的。 OK?

答案 1 :(得分:1)

这取决于实施。在IE 11中,输出为:

50 | 90 | 1 | 10 | 2
1a: 90, b: 50
2a: 1, b: 90
3a: 1, b: 50
4a: 10, b: 90
5a: 10, b: 50
6a: 10, b: 1
7a: 2, b: 90
8a: 2, b: 10
9a: 2, b: 1
1 | 2 | 10 | 50 | 90

在Chrome中,您将获得:

50 | 90 | 1 | 10 | 2
1a: 50, b: 90
2a: 90, b: 1
3a: 50, b: 1
4a: 90, b: 10
5a: 50, b: 10
6a: 1, b: 10
7a: 90, b: 2
8a: 50, b: 2
9a: 10, b: 2
10a: 1, b: 2
1 | 2 | 10 | 50 | 90

但是在Firefox中你会得到:

50 | 90 | 1 | 10 | 2
1a: 50, b: 90
2a: 90, b: 1
3a: 50, b: 1
4a: 10, b: 2
5a: 90, b: 2
6a: 1, b: 2
7a: 50, b: 2
8a: 50, b: 10
1 | 2 | 10 | 50 | 90

注意步骤数。最终结果是一样的。内部实施是不同的。