我正在调用 API 并获取包含大量对象的数组。数组中有数百个对象,它的一小段看起来像这样:
[
{
"name": "total_kills_glock",
"value": 70
},
{
"name": "total_kills_mac10",
"value": 39
},
{
"name": "total_kills_ump45",
"value": 136
},
{
"name": "total_shots_glock",
"value": 1262
},
{
"name": "total_hits_glock",
"value": 361
}
{
"name": "total_shots_mac10",
"value": 862
},
{
"name": "total_hits_mac10",
"value": 261
},
{
"name": "total_shots_ump45",
"value": 1610
},
{
"name": "total_hits_ump45",
"value": 598
}
]
有没有办法使用正则表达式对数组进行排序,使其看起来像这样:
[
{
"name": "glock",
"kills": 70,
"shots": 1262,
"hits": 361
},
{
"name": "mac10",
"kills": 39,
"shots": 862,
"hits": 261
},
{
"name": "ump45",
"kills": 136,
"shots": 1610,
"hits": 598
}
]
最佳答案
这是一种方法,使用正则表达式从原始名称中提取名称和数据类型,然后基于此构建一个对象:
const raw = [{
"name": "total_kills_glock",
"value": 70
},
{
"name": "total_kills_mac10",
"value": 39
},
{
"name": "total_kills_ump45",
"value": 136
},
{
"name": "total_shots_glock",
"value": 1262
},
{
"name": "total_hits_glock",
"value": 361
},
{
"name": "total_shots_mac10",
"value": 862
},
{
"name": "total_hits_mac10",
"value": 261
},
{
"name": "total_shots_ump45",
"value": 1610
},
{
"name": "total_hits_ump45",
"value": 598
}
];
var final = [];
var keys = [];
raw.forEach(v => {
const m = v.name.match(/^total_([^_]+)_(.+)$/);
const k = keys.indexOf(m[2]);
if (k == -1) {
var o = { name: m[2] };
o[m[1]] = v.value;
final.push(o);
keys.push(m[2]);
} else {
final[k][m[1]] = v.value;
}
});
console.log(final);
关于javascript - 如何使用正则表达式对数组中的 Javascript 对象进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58254040/