首页 > 解决方案 > 按字符串属性值对 JavaScript 对象进行排序

问题描述

好的,所以我从这样的服务器获取一些数据:myVar = JSON.parse(xhttp.responseText). 现在,我的 var 看起来像:

{
    someData1234:{
        score: "5",
        loc: "NY"
    },

    someData4321:{
        score: "70",
        loc: "MH"
    },

    someData4123:{
        score: "43",
        loc: "NG"
    }
}

我如何对对象进行排序,使其按分数降序排列?我尝试了其他解决方案,但似乎无法正常工作,因为我需要返回相同的对象(或对象数组)但只是重新排序

标签: javascriptsortingjavascript-objects

解决方案


如前所述,JavaScript 对象属性顺序无法保证,因此您必须将数据转换为对象数组,然后进行排序。以下示例使用Object.entriesand将初始对象转换为数组,然后通过解析每个对象中map的数值进行排序:score

const obj = { someData1234: { score: "5", loc: "NY" }, someData4321: { score: "70", loc: "MH" }, someData4123: { score: "43", loc: "NG" } };
const arr = Object.entries(obj).map(([k, v]) => ({[k]: v}));
const sorted = arr.sort((a, b) => {
  return parseInt(a[Object.keys(a)[0]].score) - parseInt(b[Object.keys(b)[0]].score);
});

console.log(sorted);
// [{"someData1234":{"score":"5","loc":"NY"}},{"someData4123":{"score":"43","loc":"NG"}},{"someData4321":{"score":"70","loc":"MH"}}]


推荐阅读