javascript - 排序数组多维javascript

标签 javascript arrays sorting multidimensional-array

我必须对此进行排序: 我正在从两个不同的 select 查询的数据库中获取数据,并且必须按 mprioritymdate 对它们进行排序。

我知道如何对对象数组进行排序,但我不能使用 object 也不能使用 object.key

    var allocations = new Array(); 
    allocations[0] =
    [   qtA =  15,
        mdata=  '1234',
        mid =  '234234234',
        qtyToDoTemp=  11,
        mpriority=  5,
        mdate=  new Date('2017-04-27 11:26:02.147'),
    ];

allocations[1] =
    [
        qtA= 13,
        mdata=  '1234',
        mid =  '234234234',
        qtyToDoTemp= 11,
        mpriority= 5,
        mdate= new Date('2016-10-07 00:00:00.000'),
    ];

allocations[2] =
    [
        qtA= 16,
        mdata=  '1234',
        mid =  '234234234',
        qtyToDoTemp= 11,
        mpriority= 4,
        mdate= new Date('2017-04-27 11:26:02.147'),
    ];

allocations[3] =
    [
        qtA= 95,
        mdata=  '1234',
        mid =  '234234234',
        qtyToDoTemp= 11,
        mpriority= 1,
        mdate= new Date('2016-10-06 00:00:00.000'),
    ];

allocations[4] =
    [
        qtA= 75,
        mdata=  '1234',
        mid =  '234234234',
        qtyToDoTemp= 11,
        mpriority= 8,
        mdate= new Date('2017-02-20 12:41:34.903'),
    ];

allocations[5] =
    [
        qtA= 45,
        mdata=  '1234',
        mid =  '234234234',
        qtyToDoTemp= 11,
        mpriority= 0,
        mdate= new Date('2017-04-27 11:26:02.147'),
    ];

排序函数应首先查看mpriority - 如果两个值相同,则检查mdate

我想应该是这样的

var sortOptions = {
    byPriorityAndDate: function (a, b) {
        return (b.mpriority - a.mpriority) || (a.mdate - b.mdate);
    },
}

以及如何检查我正在处理的 js 版本?

最佳答案

你有数组的数组,而不是对象的数组。

我建议您将数组数组转换为对象数组,实例化每个元素,如下所示:

allocations[0] = {
    qtA:  15,
    mdata:  '1234',
    mid:  '234234234',
    qtyToDoTemp:  11,
    mpriority:  5,
    mdate:  new Date('2017-04-27 11:26:02.147'),
};

这样,您编写的用于比较的函数就应该可以工作

另外,我建议您阅读Compare two dates with JavaScript了解您想要哪种比较

无论如何,这个排序函数将适合您的情况:

allocations = allocations.sort((a, b) => {
   if (a[4] === b[4]) {
        return a[5].getTime() - b[5].getTime();
   }

   return a[4] - b[4];
})

var allocations = new Array(); 
    allocations[0] =
    [   qtA =  15,
        mdata=  '1234',
        mid =  '234234234',
        qtyToDoTemp=  11,
        mpriority=  5,
        mdate=  new Date('2017-04-27 11:26:02.147'),
    ];

allocations[1] =
    [
        qtA= 13,
        mdata=  '1234',
        mid =  '234234234',
        qtyToDoTemp= 11,
        mpriority= 5,
        mdate= new Date('2016-10-07 00:00:00.000'),
    ];

allocations[2] =
    [
        qtA= 16,
        mdata=  '1234',
        mid =  '234234234',
        qtyToDoTemp= 11,
        mpriority= 4,
        mdate= new Date('2017-04-27 11:26:02.147'),
    ];

allocations[3] =
    [
        qtA= 95,
        mdata=  '1234',
        mid =  '234234234',
        qtyToDoTemp= 11,
        mpriority= 1,
        mdate= new Date('2016-10-06 00:00:00.000'),
    ];

allocations[4] =
    [
        qtA= 75,
        mdata=  '1234',
        mid =  '234234234',
        qtyToDoTemp= 11,
        mpriority= 8,
        mdate= new Date('2017-02-20 12:41:34.903'),
    ];

allocations[5] =
    [
        qtA= 45,
        mdata=  '1234',
        mid =  '234234234',
        qtyToDoTemp= 11,
        mpriority= 0,
        mdate= new Date('2017-04-27 11:26:02.147'),
    ];

allocations = allocations.sort((a, b) => {
   if (a[4] === b[4]) {
        return a[5].getTime() - b[5].getTime();
   }
   
   return a[4] - b[4];
})

console.log(allocations)

关于javascript - 排序数组多维javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43920518/

相关文章:

javascript - 添加日期以将当前日期设置为明天 - Javascript

java - 为什么 hashcode() 返回一个整数而不是长?

c - 为什么不可能有 void 数组?

sql - SQL 查询的计算复杂度

javascript - 为什么 typescript 不知道我检查了对象类型?

javascript - 限制文本区域中单行的行数和字母数

javascript - Apple MapKit JS 是否需要成员(member)计划?

javascript - 如何强制下载的文件保持在数组中的相同位置?

javascript - 实用地将日期字符串转换为 yyyy-mm-dd

python - 去除 Python 中数组列表中的空数组和零数组