排序对象然后进一步细分 - javascript

时间:2013-07-17 19:29:03

标签: javascript jquery sorting object

好的,所以我有一个这样的对象:

object = {};

object.set_1.date = <date object or unix time stamp>
object.set_1.day = "Sunday";
object.set_1.total = 12;

object.set_2.date = <date object or unix time stamp>
object.set_2.day = "Sunday";
object.set_2.total = 19;

object.set_3.date = <date object or unix time stamp>
object.set_3.day = "Monday";
object.set_3.total = 15;

等等。第四。

有没有办法按天对这些对象进行排序,然后按总计对每一天进行排序?

我确信有多种不同的方法可以实现这一目标。任何人都可以帮忙吗?什么是最好的方法呢?。

1 个答案:

答案 0 :(得分:12)

让我们更深入地了解@YuriyGalanter所说的内容。让我们从稍微重组开始:

新结构

使用九个属性修改旧对象,使其成为包含三个具有三个属性的对象的数组:

objArray = [
    {
        "date": <date object or unix time stamp>,
        "day": "Sunday",
        "total": 12
    },
    {
        "date": <date object or unix time stamp>,
        "day": "Sunday",
        "total": 19
    },
    {
        "date": <date object or unix time stamp>,
        "day": "Monday",
        "total": 15
    }
];

此方法的优点

通过采用上述方法,您可以获得一些收益。首先,可读性。阅读和理解每个对象的开始和结束位置以及了解哪些对象包含哪些属性要容易得多。其次,这将使用JavaScript轻松排序。内置的.sort()函数可以使用一个可选参数 - 一个函数 - 定义一个自定义排序“算法”,因为缺少一个更好的单词。我们来看看:

自定义JavaScript排序

objArray.sort(function (objA, objB) {
    var dayA = (objA.day).toLowerCase();
    var dayB = (objB.day).toLowerCase();

    // Sort first on day
    if(dayA > dayB) {
        return 1;
    } else if (dayA < dayB) {
        return -1;
    } else {
        // If the days are the same,
        // do a nested sort on total.
        var totalA = objA.total;
        var totalB = objB.total;

        if(totalA > totalB) {
            return 1;
        } else if (totalA < totalB) {
            return -1;
        } else {
            return 0;
        }
    }
});

只需添加下一个排序条件代替return 0;并继续,即可扩展上述嵌套排序算法。这应该让你开始朝着正确的方向前进。

祝你好运,编码愉快!