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

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

今天看到我写的另一篇JSON对象数组排序的文章,突然想到了另一种,更简便,更快速的方法,排序结果跟原来的一样:

function newSort(objArr, keyArr, type) {
    objArr.sort(function (objA, objB) {
        for (let i = 0; i < keyArr.length; i++) {
            var key = keyArr[i];
            if (objA[key] === objB[key]) {
                continue;
            }
            if (type === 'desc') {
                return objA[key] < objB[key];
            } else {
                return objA[key] > objB[key];
            }
        }
    });
    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
    }
];

var newSort = newSort(JSON.parse(JSON.stringify(arr)), ['name', 'addr', 'type', 'size'], 'desc');

console.log('排序前:');
console.log(arr);

console.log('新排序:');
console.log(newSort);

打印结果

排序前:
[ { 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: 'titanic', addr: 'americ', type: 'film', size: 1024 },
  { 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: 'hunting', addr: 'china', type: 'tv', size: 10240 },
  { name: 'drunken', addr: 'china', type: 'film', size: 2048 } ]

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

password-u

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值