Javascript 使用lodash将对象的嵌套数组排序出来

Javascript 使用lodash将对象的嵌套数组排序出来,javascript,node.js,lodash,Javascript,Node.js,Lodash,我有以下数据集,需要根据“AcctCode”和“SuperID”对其进行排序,如下使用lodash的预期结果 任何人都可以帮助我如何根据“AcctCode”和“SuperID”按升序排序,如下所示,我已经提到了预期的结果集。我使用了u.orderBy(data),但是它给出了一个答案,如果我们传递的是一个对象的整个数组,而不是我在下面提到的 示例数据集: [ { "100" : [ { "id" : 1, "EmpId" : 100,

我有以下数据集,需要根据“AcctCode”和“SuperID”对其进行排序,如下使用lodash的预期结果

任何人都可以帮助我如何根据“AcctCode”和“SuperID”按升序排序,如下所示,我已经提到了预期的结果集。我使用了u.orderBy(data),但是它给出了一个答案,如果我们传递的是一个对象的整个数组,而不是我在下面提到的

示例数据集:

[
  {
    "100" : [
      {
        "id" : 1,
        "EmpId" : 100,
        "AcctCode" : "2002-00",
        "SuperID" : 2000,
        "ReportNo" : "10000"
      },
      {
        "id" : 2,
        "EmpId" : 100,
        "AcctCode" : "2001-00",
        "SuperID" : 2000,
        "ReportNo" : "10000"
      },
      {
        "id" : 3,
        "EmpId" : 100,
        "AcctCode" : "2000-00",
        "SuperID" : 2000,
        "ReportNo" : "10000"
      }
    ],
   "101" : [
     {
        "id" : 4,
        "EmpId" : 101,
        "AcctCode" : "2001-00",
        "SuperID" : 2000,
        "ReportNo" : "10000"
      },{
        "id" : 3,
        "EmpId" : 100,
        "AcctCode" : "2001-10",
        "SuperID" : 2000,
        "ReportNo" : "10000"
      } 
    ] 
  }]
预期结果如下

 [
  {
    "100" : [
       {
        "id" : 3,
        "EmpId" : 100,
        "AcctCode" : "2000-00",
        "SuperID" : 2000,
        "ReportNo" : "10000"
      },
      {
        "id" : 2,
        "EmpId" : 100,
        "AcctCode" : "2001-00",
        "SuperID" : 2000,
        "ReportNo" : "10000"
      },
      {
        "id" : 1,
        "EmpId" : 100,
        "AcctCode" : "2002-00",
        "SuperID" : 2000,
        "ReportNo" : "10000"
      },


    ],
   "101" : [
     {
        "id" : 4,
        "EmpId" : 101,
        "AcctCode" : "2001-00",
        "SuperID" : 2000,
        "ReportNo" : "10000"
      },{
        "id" : 3,
        "EmpId" : 100,
        "AcctCode" : "2001-10",
        "SuperID" : 2000,
        "ReportNo" : "10000"
      } 
    ] 
  }]

lodash
使用
sort
方法:

Object.values(arr[0]).sort((a, b) => {
    var aAcctCode = parseInt(a.AcctCode.split('-').join(''));
    var bAcctCode = parseInt(b.AcctCode.split('-').join(''));
    var aSuperID = parseInt(a.SuperID);
    var bSuperID = parseInt(b.SuperID);
    return aAcctCode - bAcctCode != 0 ? aAcctCode - bAcctCode : aSuperID - bSuperID;
});

一旦算法到位,您的同一arr将保存排序后的值。

不使用
lodash
使用
排序
方法:

Object.values(arr[0]).sort((a, b) => {
    var aAcctCode = parseInt(a.AcctCode.split('-').join(''));
    var bAcctCode = parseInt(b.AcctCode.split('-').join(''));
    var aSuperID = parseInt(a.SuperID);
    var bSuperID = parseInt(b.SuperID);
    return aAcctCode - bAcctCode != 0 ? aAcctCode - bAcctCode : aSuperID - bSuperID;
});

一旦算法就位,您的同一arr将保存排序后的值。

lodash一起使用

var data = ... //per your definition   

// reduce over the key/value pairs (k,v) to produce a copy of the
// object but with values sorted as you described 
var obj = _.reduce(data[0],(acc,v, k) => {
    acc[k] = _.sortBy(v, ['AcctCode','SuperID']);
    return acc;
},{});

[obj] // to re-wrap the object into array so we get the output format you specified

使用
lodash

var data = ... //per your definition   

// reduce over the key/value pairs (k,v) to produce a copy of the
// object but with values sorted as you described 
var obj = _.reduce(data[0],(acc,v, k) => {
    acc[k] = _.sortBy(v, ['AcctCode','SuperID']);
    return acc;
},{});

[obj] // to re-wrap the object into array so we get the output format you specified

您需要使用映射
数据[0]
的值,然后使用:


不清楚
SuperID
的排序顺序应该是什么,所以我只是将其设置为降序。

您需要使用映射
数据[0]
的值,然后使用:

不清楚
SuperID
的排序顺序应该是什么,所以我只是将其设置为降序