複製Excel的JS排序的最佳方法是什麼?複製Excel的「排序方式」,然後按「行爲
比方說,我有一個元素的數組:
[6,0.75]
[6,0.81]
[9,0.75]
[4,0.20]
通過第一個關鍵排序他們是很容易,但如何複製「然後按」排序? Excel中會吐出用1鍵遞減和第二關鍵遞減以下結果:
[9,0.75]
[6,0.81]
[6,0.75]
[4,0.20]
複製Excel的JS排序的最佳方法是什麼?複製Excel的「排序方式」,然後按「行爲
比方說,我有一個元素的數組:
[6,0.75]
[6,0.81]
[9,0.75]
[4,0.20]
通過第一個關鍵排序他們是很容易,但如何複製「然後按」排序? Excel中會吐出用1鍵遞減和第二關鍵遞減以下結果:
[9,0.75]
[6,0.81]
[6,0.75]
[4,0.20]
對於給定的例子,有這樣做的更簡單的方法,但在一般情況下,您可以將函數傳遞給sort方法,該方法將按指定順序比較每對值。 (jsfiddle)
var arr1 = [[6, 0.75], [6, 0.81], [9, 0.75], [4, 0.20]],
arr2 = [[6, 0.75], [6, 0.81], [9, 0.75], [4, 0.20]],
people = [{name: 'Jim', age: 40}, {name: 'Sally', age: 35},
{name: 'Tim', age: 20}, {name: 'Jim', age: 72}];
function orderedComparison(indices) {
return function(a, b) {
for (var i = 0; i < indices.length; i++) {
if (a[indices[i]] > b[indices[i]]) return 1;
if (a[indices[i]] < b[indices[i]]) return -1;
// (if a == b, check next index)
}
}
}
// sort by first item in each pair, then 2nd
arr1.sort(orderedComparison([0, 1]));
console.log(arr1);
// sort by 2nd item then 1st
arr2.sort(orderedComparison([1, 0]));
console.log(arr2);
people.sort(orderedComparison(['name', 'age']));
console.log(people);
注意,下面的,它只是排序由低優先級的鍵第一個那麼高優先級的關鍵,可能會工作,但爲not guaranteed to。
arr1.sort(function(a, b) {return a[1] - b[1]});
arr1.sort(function(a, b) {return a[0] - b[0]});
您可以通過縮放各分類指數複製這一功能,因此它們的大小不重疊並做使用Array.sort();
這是一個標準比較jsfiddle演示它:http://jsfiddle.net/Jd2ne/2/
提示:如果你不知道什麼大小是10的指數,當你用科學記數法寫出數字。 I.e:6 = 6 * 10^0 => 6的大小爲零。
我認爲這隻適用於數字嗎? – Teemu
是的,這是正確的。如果您希望此方法使用非數字輸入,則必須將輸入轉換爲數字,但無論如何,這就是常規排序的工作方式,唯一不同的是,您必須在此處指定數值以代表不同的輸入。 –
它應該是相當直截了當:
var array = [
[6, 0.75],
[6, 0.81],
[9, 0.75],
[4, 0.20]
];
array.sort(function (a, b) {
// if first columns are same then check second column
// else first column
return a[0] == b[0] ? a[1] - b[1] : a[0] - b[0];
});
// [4,0.20]
// [6,0.75]
// [6,0.81]
// [9,0.75]
降序,採用B - 一個代替 - B。
當對「2D-array」進行排序時,您也會得到與原生JS'Array.sort'方法相同的結果。如果在第一個索引處它滿足兩個相等的值,那麼'sort'將更深入內部數組。我想你可以通過代表一個4x4的數組來改善你的問題,然後按照3,0,2,1的順序排序。 – Teemu