1

我想要一个带有 asc 或 desc 的三级排序。

例如:

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