【问题标题】:Sort object based on financial year object根据财政年度对象排序对象
【发布时间】:2020-05-05 14:13:00
【问题描述】:

我想根据 financeYearsmonthYearObj 进行排序

var financeYears = 
[{"month":4,"year":2019,"resourceType":"Employee"},
{"month":5,"year":2019,"resourceType":"Employee"},
{"month":6,"year":2019,"resourceType":"Employee"},
{"month":7,"year":2019,"resourceType":"Employee"},
{"month":8,"year":2020,"resourceType":"Employee"},
{"month":9,"year":2020,"resourceType":"Employee"},
{"month":10,"year":2020,"resourceType":"Employee"},
{"month":11,"year":2020,"resourceType":"Employee"},
{"month":12,"year":2020,"resourceType":"Employee"},
{"month":1,"year":2020,"resourceType":"Employee"},
{"month":2,"year":2020,"resourceType":"Employee"},
{"month":3,"year":2020,"resourceType":"Employee"}]

var monthYearObj = 
[{"monthStart":1,"yearStart":2020},
{"monthStart":2,"yearStart":2020},
{"monthStart":3,"yearStart":2020},
{"monthStart":4,"yearStart":2019},
{"monthStart":5,"yearStart":2019},
{"monthStart":6,"yearStart":2019},
{"monthStart":7,"yearStart":2019},
{"monthStart":8,"yearStart":2020},
{"monthStart":9,"yearStart":2020},
{"monthStart":10,"yearStart":2020},
{"monthStart":0,"yearStart":0},
{"monthStart":0,"yearStart":0}];

并希望输出如下并代替{"monthStart":0,"yearStart":0} 应该分别基于financeYears 对象具有{"monthStart":11,"yearStart":2020}{"monthStart":12,"yearStart":2020},因为这两个月的数据缺少要添加到此处。

var finalObject = [
{"monthStart":4,"yearStart":2019},
{"monthStart":5,"yearStart":2019},
{"monthStart":6,"yearStart":2019},
{"monthStart":7,"yearStart":2019},
{"monthStart":8,"yearStart":2020},
{"monthStart":9,"yearStart":2020},
{"monthStart":10,"yearStart":2020}
{"monthStart":11,"yearStart":2020}
{"monthStart":12,"yearStart":2020}
{"monthStart":1,"yearStart":2020},
{"monthStart":2,"yearStart":2020},
{"monthStart":3,"yearStart":2020}];

正在尝试如下排序功能,但似乎没有按预期工作,

       monthYearObj.sort(function (a, b) {
        if (a.yearStart < b.yearStart ){
          return -1;
        } if (a.yearStart > b.yearStart){
            return 1;
        } 

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

      });

所以现在我想根据 FinanceYears 对其进行排序。

【问题讨论】:

    标签: javascript arrays sorting object


    【解决方案1】:

    您可以获取一个对象作为值并按顺序映射存储的值或使用给定数据创建一个新对象。

    var financeYears = [{ month: 4, year: 2019, resourceType: "Employee" }, { month: 5, year: 2019, resourceType: "Employee" }, { month: 6, year: 2019, resourceType: "Employee" }, { month: 7, year: 2019, resourceType: "Employee" }, { month: 8, year: 2020, resourceType: "Employee" }, { month: 9, year: 2020, resourceType: "Employee" }, { month: 10, year: 2020, resourceType: "Employee" }, { month: 11, year: 2020, resourceType: "Employee" }, { month: 12, year: 2020, resourceType: "Employee" }, { month: 1, year: 2020, resourceType: "Employee" }, { month: 2, year: 2020, resourceType: "Employee" }, { month: 3, year: 2020, resourceType: "Employee" }],
        monthYearObj = [{ monthStart: 1, yearStart: 2020 }, { monthStart: 2, yearStart: 2020 }, { monthStart: 3, yearStart: 2020 }, { monthStart: 4, yearStart: 2019 }, { monthStart: 5, yearStart: 2019 }, { monthStart: 6, yearStart: 2019 }, { monthStart: 7, yearStart: 2019 }, { monthStart: 8, yearStart: 2020 }, { monthStart: 9, yearStart: 2020 }, { monthStart: 10, yearStart: 2020 }, { monthStart: 0, yearStart: 0 }, { monthStart: 0, yearStart: 0 }],
        order = monthYearObj .reduce((r, o, i) => {
            if (!o.monthStart) r[o.monthStart + '|' + o.yearStart] = o;
            return r;
        }, {}),
        result = financeYears.map(({ month, year }) => order[month + '|' + year] || { monthStart: month, yearStart: year });
    
    monthYearObj.sort((a, b) => order[a.yearStart + '|' + a.monthStart] - order[b.yearStart + '|' + b.monthStart]);
    
    console.log(result);
    .as-console-wrapper { max-height: 100% !important; top: 0; }

    【讨论】:

    • 唯一我忘记提及我的问题所以更新我的问题错过了两个月的数据作为它的 12 个月对象所以添加它。
    【解决方案2】:

    你的排序函数应该在底部return 0,因为这两个元素是相等的。此外,您根本没有使用您的 financeYears 对象,您只是按年和月排序。

    【讨论】:

      猜你喜欢
      • 2021-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多