1

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"]]);

配列の最初の値でソートする方法は?

4

0 に答える 0