JSON对象字符串数组多字段(多列)排序

来源:互联网 发布:mysql官网下载 编辑:程序博客网 时间:2024/06/16 06:14

JSON对象字符串数组多字段(多列)排序


/** 功能:对JSON对象字符串数组进行多字段(多列)排序* 参数:*   objArr: 目标数组*   keyArr: 排序字段,以数组形式传递*   type:排序方式,undefined以及asc都是按照升序排序,desc按照降序排序* */function sortObjectArray(objArr, keyArr, type) {    if (type != undefined && type != 'asc' && type != 'desc') {        return 'error';    }    var order = 1;    if (type != undefined && type == 'desc') {        order = -1;    }    var key = keyArr[0];    objArr.sort(function (objA, objB) {        if (objA[key] > objB[key]) {            return order;        } else if (objA[key] < objB[key]) {            return 0 - order;        } else {            return 0;        }    })    for (var i = 1; i < keyArr.length; i++) {        var key = keyArr[i];        objArr.sort(function (objA, objB) {            for (var j = 0; j < i; j++) {                if (objA[keyArr[j]] != objB[keyArr[j]]) {                    return 0;                }            }            if (objA[key] > objB[key]) {                return order;            } else if (objA[key] < objB[key]){                return 0 - order;            } else {                return 0;            }        })    }    return objArr;}
测试代码:
var arr = [    {        name: 'titanic',        addr: 'americ',        type: 'film',        size: 1024    },    {        name: 'hunting',        addr: 'china',        type: 'tv',        size: 10240    },    {        name: 'drunken',        addr: 'china',        type: 'film',        size: 2048    },    {        name: 'lifetimes',        addr: 'china',        type: 'tv',        size: 20    },    {        name: 'lifetimes',        addr: 'china',        type: 'tv',        size: 2    },    {        name: 'lifetimes',        addr: 'americ',        type: 'tv',        size: 204    },    {        name: 'lifetimes',        addr: 'americ',        type: 'film',        size: 20480    }];console.log('排序前:');console.log(arr);var orderArr = sortObjectArray(arr, ['name', 'addr', 'type', 'size']);console.log('排序后:');console.log(orderArr);

打印结果:
排序前:[ { name: 'titanic', addr: 'americ', type: 'film', size: 1024 },  { name: 'hunting', addr: 'china', type: 'tv', size: 10240 },  { name: 'drunken', addr: 'china', type: 'film', size: 2048 },  { name: 'lifetimes', addr: 'china', type: 'tv', size: 20 },  { name: 'lifetimes', addr: 'china', type: 'tv', size: 2 },  { name: 'lifetimes', addr: 'americ', type: 'tv', size: 204 },  { name: 'lifetimes', addr: 'americ', type: 'film', size: 20480 } ]排序后:[ { name: 'drunken', addr: 'china', type: 'film', size: 2048 },  { name: 'hunting', addr: 'china', type: 'tv', size: 10240 },  { name: 'lifetimes', addr: 'americ', type: 'film', size: 20480 },  { name: 'lifetimes', addr: 'americ', type: 'tv', size: 204 },  { name: 'lifetimes', addr: 'china', type: 'tv', size: 2 },  { name: 'lifetimes', addr: 'china', type: 'tv', size: 20 },  { name: 'titanic', addr: 'americ', type: 'film', size: 1024 } ]

原创粉丝点击