【问题标题】:sort object then subsort further - javascript [closed]排序对象然后进一步子排序 - javascript [关闭]
【发布时间】:2013-07-16 12:38:29
【问题描述】:

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

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;

还有第四个。

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

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

【问题讨论】:

  • 如果您将单个对象放入数组并且只有 3 个具有 3 个属性的对象(而不是 1 个具有 9 个属性的对象),那么 Array.Sort 可以接受自定义排序函数,您可以按照自己的意愿实现该函数

标签: javascript jquery sorting object


【解决方案1】:

让我们更深入地看看@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; 并继续。这应该可以让您朝着正确的方向开始。

祝你好运,编码愉快!

【讨论】:

  • 耶!非常感谢!我刚开始尝试这样的事情(对此事的了解要少得多..甚至谷歌搜索对我没有太大帮助)
  • @DustinSilk 不是问题,伙计。乐意效劳。对你来说,这实际上是一个很好的时机。就在几天前,我为我现在正在从事的一个项目编写了一个非常相似的自定义排序,所以它在我的大脑中仍然很新鲜。
猜你喜欢
  • 2013-12-16
  • 2019-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-09
  • 2017-09-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多