【问题标题】:Sorting object property by key array通过键数组对对象属性进行排序
【发布时间】:2021-09-08 07:04:32
【问题描述】:

如果我有一个 JavaScript 对象,例如:

const group = {
    Gp1: 1, 
    Gp12:1, 
    Gp11:2, 
    Gp10: 0,
    Gp2: 1, 
    Gp5: 4,
    Gp3: 4,
    Gp4: 4,
    Gp6: 4,
};

我想通过数组的键进行排序升序 使用此代码

const sortable = Object.fromEntries(
    Object.entries(group).sort(([,a],[,b]) => a-b)
);
console.log(sortable);

我结束了

{
  Gp1: 1,
  Gp10: 0,
  Gp11: 2,
  Gp12: 1,
  Gp2: 1,
  Gp3: 4,
  Gp4: 4,
  Gp5: 4,
  Gp6: 4
}

有没有办法根据键数组对属性进行排序?所以我最终得到了

{
  Gp1: 1,
  Gp2: 1,
  Gp3: 4,
  Gp4: 4,
  Gp5: 4,
  Gp6: 4,
  Gp10: 0,
  Gp11: 2,
  Gp12: 1,
}

【问题讨论】:

  • 按顺序对对象属性进行排序没有意义吗?因为你最终会使用key 并从object 获取值。
  • Object.entries() 返回一个数组数组。在“内部”数组中,第一个元素是属性,第二个元素是值。您跳过第一个元素并使用第二个。只要适应它......
  • @HR01M8055 我这样做是因为我想避免在我的代码中循环更多......
  • 您应该使用 sort 进行排序,如下所示:javascripttutorial.net/array/…

标签: javascript arrays sorting


【解决方案1】:

您可以使用string#localeCompare 通过传递{numeric: true} 来根据数值进行排序。

const o = { Gp1: 1, Gp10: 0, Gp11: 2, Gp12: 1, Gp2: 1, Gp3: 4, Gp4: 4, Gp5: 4, Gp6: 4 },
      result = Object.fromEntries(Object.entries(o).sort((a,b) => a[0].localeCompare(b[0], undefined, {numeric: true})));
console.log(result);

【讨论】:

  • 感谢您的回答..但这对我不起作用
【解决方案2】:

你找到这样的东西了吗?

const sortable = Object.fromEntries(
Object.entries(group).sort(([a,],[b,]) => parseInt(a.replace('Gp', '')) - parseInt(b.replace('Gp', '')))
);

【讨论】:

  • 感谢您的回答..但这对我不起作用..结果与我的代码相同
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
相关资源
最近更新 更多