Javascript 排序复杂json
朋友们,我有以下javascript对象: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}
{
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干净吗?大概简洁的?当然可读/可维护?不是真的。