Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript-根据公共值重新构造对象数组_Javascript_Arrays_Lodash - Fatal编程技术网

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所期望的。。。。。