對值數字進行排序時未獲得 Javascript 預期物件結果(鍵和值也是數字)
let team_id_Point = {
26: 15,
32: 1,
127: 21,
};
function sortObjectbyValue(obj = {}, asc = true) {
const ret = {};
Object.keys(obj)
.sort((a, b) => obj[asc ? a : b] - obj[asc ? b : a])
.forEach((s) => (ret[s] = obj[s]));
return JSON.stringify(ret);
}
console.log(sortObjectbyValue(team_id_Point, false));
上面的結果:
{"26":15,"32":1,"127":21}
所需輸出:
{"127":21,"26":15,"32":1}
uj5u.com熱心網友回復:
盡管 JavaScript 物件屬性現在有順序,但依賴它們的順序是一種反模式。
如果您需要訂購,請使用陣列。
所需輸出
您無法使用 JavaScript 物件獲得所需的輸出,因為:
- 這些屬性名稱是陣列索引名稱,因此物件的“順序”將它們按數字順序排列。
JSON.stringify遵循物件的屬性順序。
另請注意,JSON(與 JavaScript 不同)認為物件“......一組無序的名稱/值對......”所以對于 JSON,{"a": 1, "b": 2}并且{"b": 2, "a": 1}完全等價。
您可以使用 a Map,但 JSON 表示將不是您所期望的。
或者您可以手動構建 JSON(忽略 JSON 不認為物件有任何順序),使用JSON.stringify值但輸出{、 屬性名稱和您}自己。
但實際上,如果您需要訂單,請使用陣列。
這是一個使用陣列陣列的示例:
let team_id_Point = [
[26, 15],
[32, 1],
[127, 21],
];
function sortTeamIdPoint(data = [], asc = true) {
const result = [...data];
const sign = asc ? 1 : -1;
result.sort((a, b) => (a[0] - b[0]) * sign);
return JSON.stringify(result);
}
console.log(sortTeamIdPoint(team_id_Point, false));
或物件陣列:
let team_id_Point = [
{id: 26, points: 15},
{id: 32, points: 1},
{id: 127, points: 21},
];
function sortTeamIdPoint(data = [], asc = true) {
const result = [...data];
const sign = asc ? 1 : -1;
result.sort((a, b) => (a.id - b.id) * sign);
return JSON.stringify(result);
}
console.log(sortTeamIdPoint(team_id_Point, false));
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/468504.html
標籤:javascript 节点.js json 排序
上一篇:過濾嵌套物件并回傳值以及父鍵
下一篇:如何洗掉R中的重復列名?
