7

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

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;

等等第四。

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

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

4

1 回答 1

19

让我们更深入地看看@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()函数可以采用可选参数 - A Function - 定义自定义排序“算法”,因为缺少更好的词。让我们看一下:

自定义 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;
        }
    }
});

上面的嵌套排序算法可以扩展,只需添加下一个排序标准来代替 thereturn 0;并继续。这应该让您朝着正确的方向开始。

祝你好运,编码愉快!

于 2013-07-17T20:01:04.313 回答