Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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
按json键值对列表进行分组,并创建一个新的列表javascript_Javascript_List_Group By - Fatal编程技术网

按json键值对列表进行分组,并创建一个新的列表javascript

按json键值对列表进行分组,并创建一个新的列表javascript,javascript,list,group-by,Javascript,List,Group By,我想通过基于JSON键值对数据进行分组来创建一个新的JSON对象列表 我有一个数组列表: var models = [ { 'parentId': '12', 'model': 'r8', 'year': ['2012'] }, { 'parentId': '12', 'model': 'rs5', 'year': ['2012', '2013'] }, { 'paren

我想通过基于JSON键值对数据进行分组来创建一个新的JSON对象列表

我有一个数组列表:

var models = [
    {   'parentId': '12',
        'model': 'r8',
        'year': ['2012']
    }, {
        'parentId': '12',
        'model': 'rs5',
        'year': ['2012', '2013']
    }, { 
        'parentId': '13',
        'model': 'mustang',
        'year': ['2012']
    }, {
        'parentId': '14',
        'model': 'fusion',
        'year': ['2012']
    },
];
我想创建一个按父id分组的新列表,以便最终结果:

var models = [ 
   {
    'parentId':'12' 
    'data': [
        { 
            'model': 'r8',
            'year': ['2012']
        }, {
            'model': 'rs5',
            'year':['2012', '2013']
        }
    ]
    }, 
    {
    'parentId':'13'
    'data': [
       {
            'model': 'mustang',
            'year': ['2012']
        }
    ]
    },
    {
    'parentId':'14'
    'data': [
       {
            'model': 'fusion',
            'year': ['2012']
        }
    ]
    }
]
我是这样做的,但对于大型阵列来说有点慢,因为我使用了两个循环。有人能帮我提高效率吗:

var模型=[
{'parentId':'12',
“型号”:“r8”,
“年份”:[“2012年”]
}, {
“parentId”:“12”,
“型号”:“rs5”,
‘年份’:[‘2012’、‘2013’]
}, { 
“parentId”:“13”,
“模型”:“野马”,
“年份”:[“2012年”]
}, {
“parentId”:“14”,
“模型”:“融合”,
“年份”:[“2012年”]
},
];
让newModels=[];
适用于(型号项目){
itemData=[];
让currentParentId=item.parentId;
itemData.push(item);
对于(一组模型){
if(i.parentId==currentParentId){
itemData.push(i);
}
}
push({parentId:currentParentId,data:itemData})
}

console.log(newModels)
您可以使用一个
reduce
来创建对象,在其中您按
parentId
进行分组,然后获得一个带有
object.value
的数组

var models=[{“parentId”:“12”,“model”:“r8”,“year”:[“2012”]},{“parentId”:“12”,“model”:“rs5”,“year”:[“2012”,“2013”]},{“parentId”:“13”,“model”:“mustang”,“year”:[“2012”]},{“parentId”:“14”,“model”:“fusion”,“year”:[“2012”]}]
const result=models.reduce((r,{parentId,…rest})=>{
如果(!r[parentId])r[parentId]={parentId,数据:[rest]}
else r[parentId].data.push(rest);
返回r;
}, {})

console.log(Object.values(result))
创建一个由
parentId
s索引的对象,这样您只需在
模型中循环一次,然后获取其值:

const模型=[{
“parentId”:“12”,
“型号”:“r8”,
“年份”:[“2012年”]
}, {
“parentId”:“12”,
“型号”:“rs5”,
‘年份’:[‘2012’、‘2013’]
}, {
“parentId”:“13”,
“模型”:“野马”,
“年份”:[“2012年”]
}, {
“parentId”:“14”,
“模型”:“融合”,
“年份”:[“2012年”]
}];
constmodelsbyparentid={};
用于(模型的常数{parentId,模型,年份}){
如果(!modelsByParentId[parentId]){
modelsByParentId[parentId]={parentId,数据:[]};
}
modelsByParentId[parentId].data.push({model,year});
}
log(Object.values(modelsByParentId))
const模型=[
{
“parentId”:“12”,
“型号”:“r8”,
“年份”:[“2012]”,
}, {
“parentId”:“12”,
“型号”:“rs5”,
‘年份’:[‘2012’、‘2013’]
}, {
“parentId”:“13”,
“模型”:“野马”,
“年份”:[“2012年”]
}, {
“parentId”:“14”,
“模型”:“融合”,
“年份”:[“2012年”]
}
]
const itemsObject=models.reduce((累加器,当前值)=>{
if(累加器[currentValue.parentId]){
累加器[currentValue.parentId].push(currentValue)
}否则{
累加器[currentValue.parentId]=[currentValue]
}
回流蓄能器
}, {})
const result=Object.keys(itemsObject.map)(k=>({parentId:k,data:itemsObject[k]}))
console.log(结果)