我试图对一组整数升序进行排序。 为了理解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 ......但它是另一种方式。
任何人都可以解释一下吗?
答案 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
注意步骤数。最终结果是一样的。内部实施是不同的。