Javascript 对嵌套对象排序
我正试图通过object.keys在javascript中根据cummulativeSite按降序对objects obj中的object进行排序,但没有得到排序。请建议一种好的方法或方法来对其进行排序Javascript 对嵌套对象排序,javascript,jquery,sorting,javascript-objects,nested-object,Javascript,Jquery,Sorting,Javascript Objects,Nested Object,我正试图通过object.keys在javascript中根据cummulativeSite按降序对objects obj中的object进行排序,但没有得到排序。请建议一种好的方法或方法来对其进行排序 var obj={ B.E:{ A: {percentgsite: 8.5, backlogenclsite: 8.5, regularenclsite: 3.5, cummulativeSite: 20.5}, B: {percentgsite: 5.9, backlog
var obj={
B.E:{
A: {percentgsite: 8.5, backlogenclsite: 8.5, regularenclsite: 3.5, cummulativeSite: 20.5},
B: {percentgsite: 5.9, backlogenclsite: 5.9, regularenclsite: 8.5, cummulativeSite: 20.3},
C: {percentgsite: 5.9, backlogenclsite: 6.4, regularenclsite: 8.9, cummulativeSite: 21.200000000000003}
},
Diploma:{
A: {percentgsite: 8.5, cummulativeSite: 5.2},
B: {percentgsite: 5.9, cummulativeSite: 8.5},
C: {percentgsite: 5.9, cummulativeSite: 5.6}
},
M.E:{
A: {percentgsite: 8.5, cummulativeSite: 11.9},
B: {percentgsite: 5.9, cummulativeSite: 12.9},
C: {percentgsite: 5.9, cummulativeSite: 13.5}
}
}
预期产出:
var obj={
B.E:{
C: {percentgsite: 5.9, backlogenclsite: 6.4, regularenclsite: 8.9, cummulativeSite: 21.200000000000003},
A: {percentgsite: 8.5, backlogenclsite: 8.5, regularenclsite: 3.5, cummulativeSite: 20.5},
B: {percentgsite: 5.9, backlogenclsite: 5.9, regularenclsite: 8.5, cummulativeSite: 20.3}
},
Diploma:{
B: {percentgsite: 8.5, cummulativeSite: 8.5},
C: {percentgsite: 5.9, cummulativeSite: 5.6},
A: {percentgsite: 5.9, cummulativeSite: 5.2}
},
M.E:{
C: {percentgsite: 8.5, cummulativeSite: 13.5},
B: {percentgsite: 5.9, cummulativeSite: 12.9},
A: {percentgsite: 5.9, cummulativeSite: 11.9}
}
}
您可以使用嵌套的和类似的
var obj={“B.E”:{A:{百分位:8.5,背面镶嵌石:8.5,规则镶嵌石:3.5,累积镶嵌石:20.5},B:{百分位:5.9,背面镶嵌石:5.9,规则镶嵌石:8.5,累积镶嵌石:20.3},C:{百分位:5.9,背面镶嵌石:6.4,规则镶嵌石:8.9,累积镶嵌石:21.20000000003,累积镶嵌石:2,累积镶嵌石:5}{percentgsite:5.9,cumulativesite:8.5},C:{percentgsite:5.9,cumulativesite:5.6},“M.E:{A:{percentgsite:8.5,cumulativesite:11.9},B:{percentgsite:5.9,cumulativesite:12.9},C:{percentgsite:5.9,cumulativesite:13.5}
const sortedObj=Object.entries(obj).reduce((acc,[dept,v])=>{
const sortedDept=对象条目(v)
.sort(([k1,v1],[k2,v2])=>v2.cumulativesite-v1.cumulativesite)
.reduce((r[k,v])=>(r[k]=v,r),{});
acc[部门]=已分拣的数据;
返回acc;
}, {})
console.log(sortedObj)
正如您在评论中提到的,您可以将B.E
等更改为数组(因为对象不保证顺序)。因此,我将在数组中更改它们,然后根据cumulativesite
属性对它们进行排序
(A:{百分之:8.5,背景积层:8.5,规则积层:3.5,背景积层:3.5,背景积层:3.5,累积积层:20.5}},{B:{百分之:20.5},{B:{百分之:20.5,背景积层:20.5},{B:{他们他们他们他们他们他们:{5.5},{B:{百分之:20.5.5.5}}},{5.5},{一个},{B:{B:{百分之:百分之:20.5.5.5.5.5.5.5,累积积层:20.5}}}}},{,{5.5,累积积层:20.5.5},积层:20.5.5}}}},{5,积层:20.5}},{},{B:{percentgsite:5.9,cumulativesite:8.5},{C:{percentgsite:5.9,cumulativesite:5.6}],'M.E':[{A:{percentgsite:8.5,cumulativesite:11.9},{B:{percentgsite:5.9,cumulativesite:12.9},{C:{percentgsite:5.9,cumulativesite:13.5}]
Object.keys(obj.forEach)(e=>{
obj[e].排序((a,b)=>{
返回Object.values(a)[0].cumulativeSite-
Object.values(b)[0].cumulativeSite
})
})
控制台日志(obj)那不是一个有效的数组。
arr
是一个数组还是一个以B.E
、文凭
和M.E
为键的对象?我想B.E、文凭和M.E是独立的数组,对吗?@adigaobject@WagnerdeAndradePerin他们是objects@Kris对象不保证顺序,所以如果y,则B.E,M.E需要是数组如果我把文凭、文凭和医学硕士作为一个数组放在这个对象里,那就足够了吗@adiga@Kris您打算如何将“B.E”转换为数组?结构是否为“B.E”:[{“A”:{percentgsite}},{“B”:{percentgsite}}]
或“B.E”:[{percentgsite},{percentgsite}]
这是我将其更改为数组时的格式。我是否可以实现您在本例中建议的排序方式。@adigavar obj={B.E:[0:{A:{percentgsite:8.5,backlogenclsite:8.5,regularenclesite:3.5,cumulativesite:20.5},B:{percentgsite:5.9,backlogenclsite:5.9,regularenclesite:8.5,cumulativesite:20.3};C:{percentgsite:5.9,backlogenclsite:6.4,regulareclasite:8.9,cumulativesite:2120000000003}],@adigavar obj={B.E:[0:{A:{percentgsite:8.5,backlogenclsite:8.5,regulareclasite:3.5,cumulativesite:20.5},B:{percentgsite:5.9,backlogenclasite:5.9,regularecluativesite:8.5,cumulativesite:20.3]{percentgsite:5.9,backlogenclsite:6.4,regularenclsite:8.9,CumulativeSite:21.20000000003}],@Code Maniac我得到的是这种格式的B.E数组。你能建议排序吗now@Kris您发布的一个似乎不是有效的一个{B.E:[0:
这0是数组所在的索引@code Maniac