我从第三方api收到奇怪的响应,如下图所示
{
"27000CE": -1,
"27100CE": 2,
"27300CE": -1,
"27200CE": 5
}
如何按值对它进行排序?
像上升或下降。
{
"27300CE": -1,
"27000CE": -1,
"27100CE": 2,
"27200CE": 5
}
我尝试了以下类似的方法
sortArrayOfObjects = (arr, key) => {
return arr.sort((a, b) => {
return a[key] - b[key];
});
};
但是所有键都不一样,这就是问题所在。
答案 0 :(得分:1)
您可以对 Object.entries
进行排序,然后使用 reduce
创建新对象,如下所示:
const response = {
"27100CE": 2,
"27000CE": -1,
"27300CE": -1,
"27200CE": 5
}
const sorted = Object.entries(response)
.sort((a, b) => a[1] - b[1])
.reduce((r, [key, value]) => {
r[key] = value
return r
}, {})
console.log(sorted)
仅当response
中没有整数键时,此方法才有效。更多信息:Does JavaScript Guarantee Object Property Order?
答案 1 :(得分:0)
我相信您会收到一个对象,在这种情况下,您的输入将如下所示:
let obj = {"27300CE": -1, "27200CE": 5, "27100CE": 2, "27000CE": -1}
您可以按如下所示的值进行排序:
let keys = Object.keys(obj);
// Then sort by using the keys to lookup the values in the original object:
keys.sort(function(a, b) { return obj[a] - obj[b] });
console.log(keys);//["27300CE", "27000CE", "27100CE", "27200CE"]
根据新的键序列,您可以创建一个新的obj,如果您愿意,可以将其排序