对象未根据 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));