Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 排序复杂json_Javascript_Arrays_Json_Sorting - Fatal编程技术网

Javascript 排序复杂json

Javascript 排序复杂json,javascript,arrays,json,sorting,Javascript,Arrays,Json,Sorting,朋友们,我有以下javascript对象: { id: {0: 3, 1: 2, 2: 1} amount: {0: 1000, 1: 5000, 2: 300}, date: {0: "aaa", 1: "bbb", 2: "ccc"} } 如何按“金额”键降序排序?“id”和“date”对象必须根据排序的数量重新排列 预期结果是: { id: {0: 2, 1: 3, 2: 1}

朋友们,我有以下javascript对象:

{
    id:     {0: 3,      1: 2,       2: 1}
    amount: {0: 1000,   1: 5000,    2: 300},
    date:   {0: "aaa",  1: "bbb",   2: "ccc"}
}
如何按“金额”键降序排序?“id”和“date”对象必须根据排序的数量重新排列

预期结果是:

{
    id:     {0: 2,      1: 3,       2: 1}
    amount: {0: 5000,   1: 1000,    2: 300},
    date:   {0: "bbb",  1: "aaa",   2: "ccc"}
}

我首先建议您更改数据布局。它不是一个排序友好的格式。我建议改为:

[
{id:2,金额:5000,日期:“bbb”},
{id:3,金额:1000,日期:“aaa”},
{id:1,金额:300,日期:“ccc”},
]
完成后,您可以使用sortBy方法对子键上的数组进行排序,如:

例:

sortBy(obj2,(行)=>row.amount,(结果)=>{
控制台日志(结果);
})

老实说,这种格式的数据很难处理。我的建议是,如果有任何改变结构的方法,那将是非常可取的。但是,如果不是这样,您可以将数据处理为可行的格式,对其进行排序,然后将其处理回原始格式,如下所示:

let数据={
id:{0:3,1:2,2:1},
金额:{0:1000,1:5000,2:300},
日期:{0:“aaa”,1:“bbb”,2:“ccc”}
}
//按索引对数据进行分组,即id[0]、金额[0]和日期[0]应分组在一起
让grouped=Object.entries(data.id).reduce((res,curr)=>{
让[key,value]=curr;
res.push([data.id[key],data.amount[key],data.date[key]]);
返回res;
}, []);
//按索引1(金额)降序排序
让排序=分组。排序((a,b)=>{
返回b[1]-a[1];
});
//将排序后的数据放回原始结构
让final=sorted.reduce((res,curr,index)=>{
let[id、金额、日期]=货币;
res.id[index]=id;
实物金额[指数]=金额;
恢复日期[索引]=日期;
返回res;
},{id:{},金额:{},日期:{});

控制台日志(最终)
amount
amount
的键进行排序,并使用这些排序键的顺序以新的顺序重新创建对象:

const x = {
    id:     {0: 3,      1: 2,       2: 1}, 
    amount: {0: 1000,   1: 5000,    2: 300},
    date:   {0: "aaa",  1: "bbb",   2: "ccc"}, 
};

const newX = Object.keys(x.amount)
  .sort((a, b) => x.amount[b] - x.amount[a])
  .reduce((a, c, i) => ({
    id: { ...a.id, [i]: x.id[c] },
    amount: { ...a.amount, [i]: x.amount[c] },
    date: { ...a.date, [i]: x.date[c] },
 }), { id: {}, amount: {}, date: {} }) ;

console.log(newX);

请用你的尝试贴一只鹬。谢谢!它工作得很好。这是几天来试图排序这个对象-我同意这是丑陋的工作,但它是我从前端得到的。非常干净的溶液。@CarlosAlzate干净吗?大概简洁的?当然可读/可维护?不是真的。