JS用にExcelの並べ替えを複製するための最良の方法は何でしょうか?
アイテムを含む配列があるとしましょう。
[6,0.75]
[6,0.81]
[9,0.75]
[4,0.20]
最初のキーで並べ替えるのは簡単ですが、「次に」並べ替えを複製するにはどうすればよいでしょうか。Excelは、1番目のキーの説明と2番目のキーの説明で次の結果を吐き出します。
[9,0.75]
[6,0.81]
[6,0.75]
[4,0.20]
JS用にExcelの並べ替えを複製するための最良の方法は何でしょうか?
アイテムを含む配列があるとしましょう。
[6,0.75]
[6,0.81]
[9,0.75]
[4,0.20]
最初のキーで並べ替えるのは簡単ですが、「次に」並べ替えを複製するにはどうすればよいでしょうか。Excelは、1番目のキーの説明と2番目のキーの説明で次の結果を吐き出します。
[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);
以下は、優先度の低いキーを最初に並べ替えてから優先度の高いキーで並べ替えるだけですが、おそらく機能しますが、が保証されるわけではないことに注意してください。
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の指数になります。つまり、6 = 6 * 10 ^ 0=>6の大きさはゼロです。