根据类别组合数组子类别的对象
Combine objects of an array's subcategories based on its category
问:这是一个包含多个对象(类别和子类别)的数组。
let cats = [
{ cat: 'letter', subCat: 'A'},
{ cat: 'letter', subCat: 'B'},
{ cat: 'number', subCat: '2'},
{ cat: 'number', subCat: '3'},
{ cat: 'number', subCat: '4'},
{ cat: 'other', subCat: '+'},
]
需要像这样转换这个猫对象 -
cats = [
{ cat: 'letter', subCat: ['A', 'B'] },
{ cat: 'number', subCat: ['2', '3', '4'] },
{ cat: 'other', subCat: ['+'] }
]
您可以使用简单的 reduce
实现此目的
let cats=[{cat:'letter',subCat:'A'},{cat:'letter',subCat:'B'},{cat:'number',subCat:'2'},{cat:'number',subCat:'3'},{cat:'number',subCat:'4'},{cat:'other',subCat:'+'},]
const merged = cats.reduce((a, {cat, subCat})=>{
a[cat] = a[cat] || {cat, subCat:[]}
a[cat]["subCat"].push(subCat)
return a;
},{})
console.log(Object.values(merged))
创建一个累加器,每个唯一的 cat
为 key
,最终数组中您需要的对象为 value
,如下所示:
{
"letter": {
"cat": "letter",
"subCat": [
"A",
"B"
]
}
}
然后使用 Object.values
仅获取数组中的值。
您可以一次完成所有事情:
let cats = [{cat:'letter',subCat:'A'},{cat:'letter',subCat:'B'},{cat:'number',subCat:'2'},{cat:'number',subCat:'3'},{cat:'number',subCat:'4'},{cat:'other',subCat:'+'},]
const merged = Object.values(cats.reduce((a,{cat, subCat}) => (
(a[cat] = a[cat] || {cat, subCat:[]})["subCat"].push(subCat), a
),{}))
console.log(merged)
问:这是一个包含多个对象(类别和子类别)的数组。
let cats = [
{ cat: 'letter', subCat: 'A'},
{ cat: 'letter', subCat: 'B'},
{ cat: 'number', subCat: '2'},
{ cat: 'number', subCat: '3'},
{ cat: 'number', subCat: '4'},
{ cat: 'other', subCat: '+'},
]
需要像这样转换这个猫对象 -
cats = [
{ cat: 'letter', subCat: ['A', 'B'] },
{ cat: 'number', subCat: ['2', '3', '4'] },
{ cat: 'other', subCat: ['+'] }
]
您可以使用简单的 reduce
let cats=[{cat:'letter',subCat:'A'},{cat:'letter',subCat:'B'},{cat:'number',subCat:'2'},{cat:'number',subCat:'3'},{cat:'number',subCat:'4'},{cat:'other',subCat:'+'},]
const merged = cats.reduce((a, {cat, subCat})=>{
a[cat] = a[cat] || {cat, subCat:[]}
a[cat]["subCat"].push(subCat)
return a;
},{})
console.log(Object.values(merged))
创建一个累加器,每个唯一的 cat
为 key
,最终数组中您需要的对象为 value
,如下所示:
{
"letter": {
"cat": "letter",
"subCat": [
"A",
"B"
]
}
}
然后使用 Object.values
仅获取数组中的值。
您可以一次完成所有事情:
let cats = [{cat:'letter',subCat:'A'},{cat:'letter',subCat:'B'},{cat:'number',subCat:'2'},{cat:'number',subCat:'3'},{cat:'number',subCat:'4'},{cat:'other',subCat:'+'},]
const merged = Object.values(cats.reduce((a,{cat, subCat}) => (
(a[cat] = a[cat] || {cat, subCat:[]})["subCat"].push(subCat), a
),{}))
console.log(merged)