对象未根据 JavaScript 中的值排序(具有键和值编号)
object not sort based on the value in JavaScript (having key and value number)
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}
尽管 JavaScript 对象属性 have an order now,依赖它们的顺序是一种反模式。
如果需要顺序,使用数组。
required output
您无法使用JavaScript对象获得所需的输出,因为:
- 那些 属性 名称是数组索引名称,因此对象的“顺序”按 数字.
顺序排列它们
JSON.stringify
遵循对象的 属性 顺序。
还要注意 JSON(与 JavaScript 不同)考虑对象 "...无序 集合 name/value 对..." 所以 JSON, {"a": 1, "b": 2}
和 {"b": 2, "a": 1}
完全等价.
您可以使用 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));
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}
尽管 JavaScript 对象属性 have an order now,依赖它们的顺序是一种反模式。
如果需要顺序,使用数组。
required output
您无法使用JavaScript对象获得所需的输出,因为:
- 那些 属性 名称是数组索引名称,因此对象的“顺序”按 数字. 顺序排列它们
JSON.stringify
遵循对象的 属性 顺序。
还要注意 JSON(与 JavaScript 不同)考虑对象 "...无序 集合 name/value 对..." 所以 JSON, {"a": 1, "b": 2}
和 {"b": 2, "a": 1}
完全等价.
您可以使用 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));