【发布时间】:2019-02-18 15:38:48
【问题描述】:
我正在对一个数组进行排序,以便数组从小到大排序。
目前我愿意。
let arr = arr2.sort((a, b) => {
if (a < b) {
return -1;
}
return 0;
});
但我被告知要这样做
let arr = arr2.sort((a, b) => (
a - b
));
这两种方法都可以正常工作,但我想弄清楚返回 a - b 与我的第一种方法是如何等效的。
【问题讨论】:
-
这不是同一种方法,但它也尊重更大的值(返回值大于零)。
-
如果第二种方法有效,我会感到惊讶,除非您返回
a.timestamp - b.timestamp -
第一种方法其实是错误的。返回
0意味着这两项是相等的,但不一定如此。由于以不同的顺序比较a, b和b, a不会产生一致的结果,因此您可以从排序算法中得到错误的结果。 -
"这两个都可以正常工作" - 不,他们没有,这就是为什么你被告知使用第二个。它们不等效,第一个不起作用。
-
@HenryLee 你不知道,这就是重点。假设您有数组
[1, 2, 3],排序算法可以调用compare(1, 2),但也可以调用compare(2, 1),具体取决于实现。如果其中一个告诉它1更小,另一个告诉它2 == 1,它无法对元素进行排序。这就是为什么返回a - b是一致的——compare(1, 2)给你-1或“1 更小”,而compare(2, 1)返回1或“2 更大”。无论哪种情况,逻辑结论都是相同的1 < 2。
标签: javascript