asc または desc でそれぞれ 3 レベルの並べ替えが必要です。
例えば:
1st sort by age(asc),then nationality(desc),then by name(asc)
これは私が今使っているものです
function sortObjects(objArray, properties) {
var primers = arguments[2] || {};
properties = properties.map(function(prop) {
if( !(prop instanceof Array) ) {
prop = [prop, 'asc']
}
if( prop[1] == 'desc' ) {
prop[1] = -1;
} else {
prop[1] = 1;
}
return prop;
});
function valueCmp(x, y) {
return x > y ? 1 : x < y ? -1 : 0;
}
function arrayCmp(a, b) {
var arr1 = [], arr2 = [];
properties.forEach(function(prop) {
var aValue = a[prop[0]],
bValue = b[prop[0]];
if( typeof primers[prop[0]] != 'undefined' ) {
aValue = primers[prop[0]](aValue);
bValue = primers[prop[0]](bValue);
}
arr1.push( prop[1] * valueCmp(aValue, bValue) );
arr2.push( prop[1] * valueCmp(bValue, aValue) );
});
return arr1 < arr2 ? -1 : 1;
}
objArray.sort(function(a, b) {
return arrayCmp(a, b);
});
}
私はこのように使用します
sortObjects(array,[["age","asc"],["nationality","desc"],["name","asc"]]);
このように国籍[1]でソートしたいのですが、うまくいきません...配列の最初の値でソートするにはどうすればよいですか?
sortObjects(array,[["age","asc"],["nationality[1]","desc"],["name","asc"]]);
配列の最初の値でソートする方法は?