各位大大好,小弟研究這個範例很久,但還是無解,想請各位大大解說一下最後那段程式碼的流程。
// 需要被排序的数组
var list = ['Delta', 'alpha', 'CHARLIE', 'bravo'];
// 对需要排序的数字和位置的临时存储
var mapped = list.map(function(el, i) {
return { index: i, value: el.toLowerCase() };
})
編譯結果
(4) [{…}, {…}, {…}, {…}]
0: {index: 0, value: "delta"}
1: {index: 1, value: "alpha"}
2: {index: 2, value: "charlie"}
3: {index: 3, value: "bravo"}
length: 4
proto: Array(0)
// 按照多个值排序数组
mapped.sort(function(a, b) {
return +(a.value > b.value) || +(a.value === b.value) - 1;
});
編譯結果>>>>>(4) [{…}, {…}, {…}, {…}]
0: {index: 1, value: "alpha"}
1: {index: 3, value: "bravo"}
2: {index: 2, value: "charlie"}
3: {index: 0, value: "delta"}
length: 4
proto: Array(0)
如果compareFunction(a, b) 小於 0 ,那麼 a 會被排列到 b 之前;**return +(a.value > b.value) || +(a.value === b.value) - 1; **
有大大可以解說這段程式碼的意思嗎~我研究好久~還是看不懂。
這邊的 +
是 Unary plus,把後面的值轉成數值
+true //1
+false //0
因此這條
return +(a.value > b.value) || +(a.value === b.value) - 1
可能的樣子:
(1 or 0) || (0 or -1)
順序是:
1
,b
排到 a
前面,不是的話 =>0
,開始檢查||
右邊的式子=>1-1
也就是 0
, a
,b
順序不變, 不是的話0-1
也就是-1
,a
排序在b
前面