JSON排序方法 - 原生sort方法扩展

Tony哥
2017-07-05 / 0 评论 / 174 阅读 / 正在检测是否收录...
/*
JSON排序方法 - 原生sort方法扩展
var obj = [
    {b: '3', c: 'c'}, 
    {b: '1', c: 'a'},
    {b: '2', c: 'b'}
];

obj.sort(sortBy('b', false, parseInt));
console.log(obj); 按照b的数字大小排序 正序

obj.sort(sortBy('b', false, String));
console.log(obj); 按照b的字符串大小排序 正序

----------------------------------------------
@function filed 要排序的键值
@param    rev   正序或者倒叙 false正序 true倒叙
@param    primer  排序比较格式化方法 parseInt String 或其它自定义的函数

*/
var sortBy = function (filed, rev, primer) {
    rev = (rev) ? -1 : 1;
    return function (a, b) {
        a = a[filed];
        b = b[filed];
        if (primer && typeof (primer) != 'undefined') {
            a = primer(a);
            b = primer(b);
        }else{
            if(!isNaN(a) && !isNaN(a)){
                a = Number(a);
                b = Number(b);
            }
        }
        if (a < b) { return rev * -1; }
        if (a > b) { return rev * 1; }
        return 1;
    }
};
以下是排序案例:
//声明一个json数组
var obj = [
    {b: '3', c: 'c'}, 
    {b: '1', c: 'a'},
    {b: '2', c: 'b'}
];

//自动识别排序,如果b是数字按照数字排序
obj.sort(sortBy('b', false));
console.log(obj);


//按照b的整数排序
obj.sort(sortBy('b', false, parseInt));
console.log(obj);

//按照b的字符串
obj.sort(sortBy('b', false, String));
console.log(obj);
0

评论 (0)

取消