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