我有一个这样形状的
Object
:
[
{
"firstLetter": "1",
"cartItem": [
{
"label": "1 ABCD",
"country": "USA"
],
},
{
"firstLetter": "3",
"cartItem": [
{
"label": "3 ASRFT",
"country": "USA"
],
},
{
"firstLetter": "4",
"cartItem": [
{
"label": "4 HELLO",
"country": "USA"
],
},
{
"firstLetter": "B",
"cartItem": [
{
"label": "BOB",
"country": "USA"
],
},
{
"firstLetter": "B",
"cartItem": [
{
"label": "BILLY",
"country": "USA"
],
},
{
"firstLetter": "G",
"cartItem": [
{
"label": "GARY",
"country": "USA"
],
},
{
"firstLetter": "G",
"cartItem": [
{
"label": "GRAHAM",
"country": "USA"
],
},
{
"firstLetter": "Y",
"cartItem": [
{
"label": "YELLOW",
"country": "USA"
],
}
现在我正在将其分组、过滤和排序:
我现在尝试对它进行分组的方式与数字略有不同。我希望所有数字都位于同一组下,如下所示:
这是我能够完成第一个列表的代码,但我希望以某种方式添加一些逻辑,将所有数字分组到同一组下
!!!!
function groupBy<firstIndex, item>(
array: item[],
grouper: (item: item) => firstIndex
) {
return array.reduce((store, item) => {
var key = grouper(item);
if (!store.has(key)) {
store.set(key, [item]);
} else {
store?.get(key)?.push(item);
}
return store;
}, new Map<firstIndex, item[]>());
}
let groupedArr = groupBy(options, x => x.label?.[0])
检查
key
是否为数字,如果是数字,则将其替换为 !!!
:
function groupBy<firstIndex, item>(
array: item[],
grouper: (item: item) => firstIndex
) {
return array.reduce((store, item) => {
var key = grouper(item);
if (/^\d+$/.test(key)) key = '!!!';
if (!store.has(key)) {
store.set(key, [item]);
} else {
store?.get(key)?.push(item);
}
return store;
}, new Map<firstIndex, item[]>());
}
let groupedArr = groupBy(options, x => x.label?.[0])