我该如何根据关键字名称对对象数组进行动态排序?-名称的区别仅在于数字字符



这是我正在获取的对象数组(源不是我的,所以我不能以任何方式更改服务器端数据的结构(。

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

有没有一种方法可以将给定的数组动态排序为以下内容?

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

更新

jsfiddle

您可以使用自定义的排序算法进行排序。您只需要使用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; }

您可以从每个对象的键中提取数字,并使用数字排序((

const d=[
{ phase4: 3 },
{ phase3: 4 },
{ phase2: 14 },
{ phase1: 46 },
{ phase6: 12 },
{ phase5: 1 },
{ 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)

最新更新