排序javascript键名

时间:2019-05-17 16:32:41

标签: javascript

这是我已成功排序的代码,最终结果是我想要的。现在,我还想进行排序,以使包含关键字“ 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);

感谢您的帮助

2 个答案:

答案 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]处的键将移到条目数组的末尾。