我需要使用相似的类型对下面的数组进行分组,并用逗号分隔每个描述。
输入
let obj=[
{
"type": "Bedroom",
"int_input": 1,
"enum_input": 0,
"enum_select": "Yes",
"description": "Test"
},
{
"type": "Bedroom",
"int_input": 1,
"enum_input": 0,
"enum_select": "Yes",
"description": "Test1"
},
{
"type": "Bedroom",
"int_input": 1,
"enum_input": 0,
"enum_select": "Yes",
"description": "Test"
},
{
"type": "Bathroom",
"int_input": 1,
"enum_input": 0,
"enum_select": "Yes",
"description": "Test"
},
{
"type": "Bathroom",
"int_input": 1,
"enum_input": 0,
"enum_select": "Yes",
"description": "Test"
},
{
"type": "Bathroom",
"int_input": 1,
"enum_input": 0,
"enum_select": "Yes",
"description": "Test"
}
]
输出
let finalobj=[
{
"type": "Bedroom",
"description": "Test,Test1,Test"
},
{
"type": "Bathroom",
"description": "Test,Test,Test"
}
]
我的尝试(我非常接近,但在第一组中未定义)
let obj=[
{
"type": "Bedroom",
"int_input": 1,
"enum_input": 0,
"enum_select": "Yes",
"description": "Test"
},
{
"type": "Bedroom",
"int_input": 1,
"enum_input": 0,
"enum_select": "Yes",
"description": "Test1"
},
{
"type": "Bedroom",
"int_input": 1,
"enum_input": 0,
"enum_select": "Yes",
"description": "Test"
},
{
"type": "Bathroom",
"int_input": 1,
"enum_input": 0,
"enum_select": "Yes",
"description": "Test"
},
{
"type": "Bathroom",
"int_input": 1,
"enum_input": 0,
"enum_select": "Yes",
"description": "Test"
},
{
"type": "Bathroom",
"int_input": 1,
"enum_input": 0,
"enum_select": "Yes",
"description": "Test"
}
]
//first take the type
let type_only=obj.map(o=>o.type);
type_only=Array.from(new Set(type_only));
let sum_obj={};
let arr=[];
//iterate types
{type_only.map((val,index) =>{
sumobj = obj.reduce((c, v) => v.type === val ? {'description': (c.description + ','+ v.description),'type':v.type} : c, 0)
arr.push(sumobj);
}
)}
console.log(arr);
console.log(type_only);

答案 0 :(得分:1)
只需reduce
进入一个对象,按类型分组,然后映射回一个对象数组:
const input=[
{
"type": "Bedroom",
"int_input": 1,
"enum_input": 0,
"enum_select": "Yes",
"description": "Test"
},
{
"type": "Bedroom",
"int_input": 1,
"enum_input": 0,
"enum_select": "Yes",
"description": "Test1"
},
{
"type": "Bedroom",
"int_input": 1,
"enum_input": 0,
"enum_select": "Yes",
"description": "Test"
},
{
"type": "Bathroom",
"int_input": 1,
"enum_input": 0,
"enum_select": "Yes",
"description": "Test"
},
{
"type": "Bathroom",
"int_input": 1,
"enum_input": 0,
"enum_select": "Yes",
"description": "Test"
},
{
"type": "Bathroom",
"int_input": 1,
"enum_input": 0,
"enum_select": "Yes",
"description": "Test"
}
];
const outputObj = input.reduce((accum, { type, description }) => {
if (!accum[type]) accum[type] = description;
else accum[type] += ',' + description;
return accum;
}, {});
const output = Object.entries(outputObj).map(([ type, description]) => ({ type, description }));
console.log(output);
答案 1 :(得分:1)
尝试以下
sample_data

答案 2 :(得分:0)
如果累加器上不存在,则使用reduce,构建基础对象,并添加当前描述。使用Object.values()
转换回数组:
const obj = [{"type":"Bedroom","int_input":1,"enum_input":0,"enum_select":"Yes","description":"Test"},{"type":"Bedroom","int_input":1,"enum_input":0,"enum_select":"Yes","description":"Test1"},{"type":"Bedroom","int_input":1,"enum_input":0,"enum_select":"Yes","description":"Test"},{"type":"Bathroom","int_input":1,"enum_input":0,"enum_select":"Yes","description":"Test"},{"type":"Bathroom","int_input":1,"enum_input":0,"enum_select":"Yes","description":"Test"},{"type":"Bathroom","int_input":1,"enum_input":0,"enum_select":"Yes","description":"Test"}];
const result = Object.values(obj.reduce((r, { type, description }) => {
r[type] = r[type] || { type, description: '' };
r[type].description += `${r[type].description ? ' ,' : ''}${description}`;
return r;
}, Object.create(null)));
console.log(result);
答案 3 :(得分:0)
您可以将array#reduce
与Map
一起使用。
let arr = [ { "type": "Bedroom", "int_input": 1, "enum_input": 0, "enum_select": "Yes", "description": "Test" }, { "type": "Bedroom", "int_input": 1, "enum_input": 0, "enum_select": "Yes", "description": "Test1" }, { "type": "Bedroom","int_input": 1, "enum_input": 0, "enum_select": "Yes", "description": "Test" }, { "type": "Bathroom", "int_input": 1, "enum_input": 0, "enum_select": "Yes", "description": "Test" }, { "type": "Bathroom", "int_input": 1, "enum_input": 0, "enum_select":"Yes", "description": "Test" }, { "type": "Bathroom", "int_input": 1, "enum_input": 0, "enum_select": "Yes", "description": "Test" } ],
result = [...arr.reduce((map,{type, description}) => {
map.has(type) ? map.get(type).description += ', ' + description : map.set(type, {type, description});
return map;
},new Map).values()];
console.log(result);