Javascript-根据公共值重新构造对象数组
我的对象输入数组是这样的,我有一个如下的输入数组:Javascript-根据公共值重新构造对象数组,javascript,arrays,lodash,Javascript,Arrays,Lodash,我的对象输入数组是这样的,我有一个如下的输入数组: [{"id": 657, "name": "Amadeus Basin", "contenttype": "province"} {"id": 1173, "name": "Amazonas Basin", "contenttype": "province"} {"id": 373, "name": "American Samoa", "contenttype": "countries"} {"id": 1, "name": "Samoa",
[{"id": 657, "name": "Amadeus Basin", "contenttype": "province"}
{"id": 1173, "name": "Amazonas Basin", "contenttype": "province"}
{"id": 373, "name": "American Samoa", "contenttype": "countries"}
{"id": 1, "name": "Samoa", "contenttype": "marine"}
{"id": 796, "name": "Amhara", "contenttype": "province"}]
我希望实现的目标是:
[
{
"contenttype": "province",
"content" : [
{
"id": 657,
"name": "Amadeus Basin"
},
{
"id": 1173,
"name": "Amazonas Basin"
},
{
"id": 796,
"name": "Amhara"
}
]
}, {
"contenttype": "countries",
"content": [
{
"id": 373,
"name" : "American Samoa"
}
]
},
{
"contenttype": "countries",
"content": [
{
"id": 1,
"name" : "Samoa"
}
]
}
]
根据一个值拆分数组中的对象,并在这些新创建的对象中创建相同对象的子数组。
使用lodash也很好。您可以使用reduce函数迭代每个项,然后检查它是否存在于数组中,如果未找到,则添加新项,如果找到,则将其推入
常量数据=[{id:657,名称:Amadeus盆地,内容类型:省},
{id:1173,名称:亚马逊盆地,内容类型:省},
{id:373,名称:美属萨摩亚,内容类型:国家},
{id:1,名称:萨摩亚,内容类型:marine},
{id:796,姓名:阿姆哈拉,内容类型:省}];
const group=data.reduceac,item=>{
const found=acc.findi=>i.contenttype==item.contenttype;
const content={id:item.id,name:item.name};
发现{
found.content.pushcontent;
}否则{
acc.push{contenttype:item.contenttype,内容:[content]}
}
返回acc;
}, [];
console.loggroup 您可以使用u.groupBy并映射所需的属性
var数据=[{id:657,名称:阿马德乌斯盆地,内容类型:省},{id:1173,名称:亚马孙盆地,内容类型:省},{id:373,名称:美属萨摩亚,内容类型:国家},{id:1,名称:萨摩亚,内容类型:海洋},{id:796,名称:阿姆哈拉,内容类型:省}],
结果=\u数据
.groupBy'contenttype'
.mapvalue,键=>{
contenttype:key,
内容:u.mapvalue,v=>u.pickv,['id','name']
}
价值
console.logresult;
如果您添加一个尝试,那就好了。您尝试了什么?\uu.groupBydata,'contenttype'为什么要向下投票?同意问题没有很好的定义。。。。但是结果似乎正是OP所期望的。。。。。