如何按键名对对象数组进行动态排序? - 名称仅因数字字符而异

问题描述

这是我要获取的对象数组(源不是我的,所以我无法以任何方式更改此数据服务器端的结构)。

[
  { phase4: 3 },{ phase3: 4 },{ phase2: 14 },{ phase1: 46 },{ phase6: 12 },{ phase5: 1 }
]

有没有办法将给定的数组动态排序为以下内容

[
  { phase1: 46 },{ phase4: 3 },{ phase5: 12 },{ phase6: 1 },]

更新

enter image description here

解决方法

您可以使用自定义排序算法进行排序。您只需要使用 Object.keys(obj)[0]

获取密钥

const arr = [
  { phase4: 3 },{ phase3: 4 },{ phase2: 14 },{ phase1: 46 },{ phase6: 12 },{ phase5: 1 },];

const result = arr.sort((a,b) => {
  const prop1 = Object.keys(a)[0];
  const prop2 = Object.keys(b)[0];
  
  if (prop1 < prop2) return -1;
  if (prop1 > prop2) return 1;
  return 0;
});

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

,

您可以从每个对象的键中获取数字并使用数字 sort()

const d=[
  { phase4: 3 },{ phase11: 11 },{ phase22: 22 }
]

const keyNum = (e) => Object.keys(e)[0].match(/\d+$/)[0];

const res = d.sort((a,b) => keyNum(a) - keyNum(b))

console.log(res)