这是我已成功排序的代码,最终结果是我想要的。现在,我还想进行排序,以使包含关键字“ newitem”的对象名称始终排在底部。
var testgogo = {
"newitemwrewt": {
"brand": {
"gdhshd": true
},
"stock": 2,
"sold": 3
},
"other": {
"brand": {
"gdhshd": true
},
"stock": 2,
"sold": 3
},
"newitemncnc": {
"brand": {
"gdhshd": true
},
"stock": 2,
"sold": 3
},
};
finalresult = Object
.keys(testgogo)
.sort(
(a, b) =>
(testgogo[a].stock !== undefined) - (testgogo[b].stock !== undefined)
|| testgogo[a].stock - testgogo[b].stock
|| testgogo[b].sold - testgogo[a].sold )[0];
console.log(finalresult);
感谢您的帮助
答案 0 :(得分:1)
无法订购Javascript对象。 如果您需要按顺序排列数据,则应将其制成数组。
答案 1 :(得分:0)
您可以根据键entries是否为字符串"newitem"
对对象的includes
进行排序。然后使用Object.fromEntries()
将已排序的条目转换回对象
const testgogo={newitemfgre:{brand:{gdhshd:!0},stock:2,sold:3},fruit:{brand:{grgrdgdr:!0,ggyugy:!0},stock:3,sold:2},vegetable:{brand:{htrhtr:!0},stock:1,sold:1},newitemwrewt:{brand:{gdhshd:!0},stock:2,sold:3},other:{brand:{gdhshd:!0},stock:2,sold:3},newitemncnc:{brand:{gdhshd:!0},stock:2,sold:3},snack:{brand:{htrhr:!0},stock:1,sold:4},afga:{brand:{gdhshd:!0},stock:1,sold:2},other:{brand:{gdhshd:!0},stock:2,sold:3}};
const str = "newitem";
const sortedEntries = Object.entries(testgogo)
.sort((a, b) => a[0].includes(str) - b[0].includes(str));
const output = Object.fromEntries(sortedEntries)
console.log(output)
减去布尔值将返回1,-1或0。
true - false === 1
false - true === -1
true - true === 0
因此,如果a[0]
有"newitem"
但没有b[0]
,则a[0]
处的键将移到条目数组的末尾。