Javascript 用数字对对象字符串进行排序

标签 javascript

我在 javascript 中有以下 JSON 对象:

var stuff = [{
"id": "20",
"serial": "0/0/19:46,0/0/149:63"
}, {
"id": "8",
"serial": "0/0/151:215,0/0/151:233"
}, {
"id": "54",
"serial": "0/0/151:26,0/0/151:37"
}, {
"id": "22",
"serial": "0/0/155:29,0/0/155:36"
}, {
"id": "4",
"serial": "0/0/151:48,0/0/151:152"
}];

我想知道如何通过“serial”字段对对象进行排序,使其像这样(考虑到序列字符串中整数的值):

var stuff = [{
"id": "20",
"serial": "0/0/19:46,0/0/149:63"
}, {
"id": "54",
"serial": "0/0/151:26,0/0/151:37"
}, {
"id": "4",
"serial": "0/0/151:48,0/0/151:152"
}, {
"id": "8",
"serial": "0/0/151:215,0/0/151:233"
}, {
"id": "22",
"serial": "0/0/155:29,0/0/155:36"
}];

提前致谢。

最佳答案

这将为您完成:

var normalizer = /[:\/]/g;

function serialCompare(a, b) {
    var alist = a.serial.replace(normalizer, ',').split(','),
       blist = b.serial.replace(normalizer, ',').split(','),
       i = 0, l = alist.length;
    while (alist[i] === blist[i] && i < l) {
        i += 1;
    };
    return (parseInt(alist[i], 10) - parseInt(blist[i], 10));
}

sortedstuff = stuff.sort(serialCompare);
// returns array sorted as you asked

See it in a fiddle .

如果您要经常排序,或者列表很长,您应该考虑创建存储在对象中的序列值的“规范化”版本。它可以是在serialCompare函数内部计算的数组,也可以是用前导零填充到相同长度的文本数字部分。

关于Javascript 用数字对对象字符串进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11835976/

相关文章:

javascript - 当文本在里面时,jquery animate 导致 div 为 'jump'

javascript - 在 Jest 模拟期间获得原始实现

javascript - AngularJS 上的自动空值

javascript - 如何使用 JS 捕获 html 表单上的所有击键?

javascript - 如何在函数中输入每三位分隔的数字

javascript - 多次克隆对象并在 jQuery 中附加克隆

javascript - javascript( typescript )类中的静态常量

javascript - 当一个回调不返回任何 Promise 时,Promise 链如何工作?

javascript - Node.js - 请求数据库和延迟

javascript - 使用javascript导出excel时合并列?