【问题标题】:Sorting nested objects using Javascript and/or Underscore.js使用 Javascript 和/或 Underscore.js 对嵌套对象进行排序
【发布时间】:2015-01-07 01:53:56
【问题描述】:

我在使用 Javascript 或 Underscore.js 按 TearSheetTypeName 和 StartDate 对对象进行排序时遇到问题。对象如下所示:

{
    Components: {141: {TearSheetTypeName: "Skyscraper", StartDate: "2015-01-01"}}
                {142: {TearSheetTypeName: "Skyscraper", StartDate: "2015-01-01"}}
                {145: {TearSheetTypeName: "New Car", StartDate: "2015-01-15"}}
                {146: {TearSheetTypeName: "New Car", StartDate: "2015-01-01"}}
}

我想要的结果:

{
    Components: {146: {TearSheetTypeName: "New Car", StartDate: "2015-01-01"}}
                {145: {TearSheetTypeName: "New Car", StartDate: "2015-01-15"}}
                {141: {TearSheetTypeName: "Skyscraper", StartDate: "2015-01-01"}}
                {142: {TearSheetTypeName: "Skyscraper", StartDate: "2015-01-01"}}
}

我试过这样做:

data = _.sortBy(data, function(obj) {
           return obj.TearSheetTypeName;
       });

但是它将对象更改为使用 0、1、2、3 作为对象名称,而不是 141、142、145 和 146。它也没有考虑 StartDate。

任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 感谢您的了解。

标签: javascript sorting underscore.js


【解决方案1】:

看起来组件应该是一个数组。有了这个前提条件,您的对象将如下所示:

{
  Components: [
    {Id: 141, TearSheetTypeName: "Skyscraper", StartDate: "2015-01-01"},
    {Id: 142, TearSheetTypeName: "Skyscraper", StartDate: "2015-01-01"},
    {Id: 145, TearSheetTypeName: "New Car", StartDate: "2015-01-15"},
    {Id: 146, TearSheetTypeName: "New Car", StartDate: "2015-01-01"}
  ]
}

那么你甚至不需要下划线来对组件进行排序。原生的Array.prototype.sort 也可以正常工作(如果您查看下划线源代码,is actually used by_.sortBy()

data.sort(function(a,b){

    if(a.TearSheetTypeName > b.TearSheetTypeName){
      return 1;
    }

    if(a.TearSheetTypeName < b.TearSheetTypeName){
      return -1;
    }

    //if we got this far, the strings are the same, so sort by date
    if(new Date(a.StartDate) > new Date(b.Startdate)) {
    return 1;
    }

    if(new Date(a.StartDate) < new Date(b.Startdate)) {
    return -1;
    }

    //if we got this far, the criteria is the same
    return 0;
});

排序发生在适当的位置,因此您无需分配它。

【讨论】:

    猜你喜欢
    • 2019-06-25
    • 2016-07-09
    • 2016-07-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多