Javascript 需要根据值对对象中的数据进行分组

Javascript 需要根据值对对象中的数据进行分组,javascript,Javascript,我正在应用程序中使用React/Typescript,但需要基本JavaScript的帮助。我试图对来自api调用的数据进行分组(在本例中,我将使用模拟数据),而不修改实际的JSON。我需要根据“deviceType”值对数据进行分组。所以,如果有4个对象,如果两个是ipad,两个是iphone,我需要将它们按顺序分组。现在,模拟数据显示的是iPadAir,然后是iPhone6plus,然后是iPadAir,然后是iPhone6plus。我需要对这些对象进行分组,以便新对象首先包含两个ipadA

我正在应用程序中使用React/Typescript,但需要基本JavaScript的帮助。我试图对来自api调用的数据进行分组(在本例中,我将使用模拟数据),而不修改实际的JSON。我需要根据“deviceType”值对数据进行分组。所以,如果有4个对象,如果两个是ipad,两个是iphone,我需要将它们按顺序分组。现在,模拟数据显示的是iPadAir,然后是iPhone6plus,然后是iPadAir,然后是iPhone6plus。我需要对这些对象进行分组,以便新对象首先包含两个ipadAir对象,然后是iphone 6plus对象。我相信这可以通过使用spread操作符复制旧对象,然后在返回之前修改它来实现。以下是数据对象:

{
    "data": {
        "DirectvNowDeviceNotifications": [
            {
                "AccountNumber": "180802190357553",
                "AlertDescription": [
                    {
                        "AlertType": "BUFFERINGERRORS",
                        "AlertCode": "CRITICAL_ISFATAL",
                        "AlertInfo": "ACCOUNT_ALERT",
                        "SkipDismissal": false,
                        "DISMISSAL_EXPIRY_DATE": "",
                        "Content": {
                            "issueTitle": "Buffering Error Detected",
                            "issueDescription": "Buffering Error Detected"
                        },
                        "AlertAdditionalInfo": [
                            {
                                "Name": "reasonCodes",
                                "Value": "CRITICAL_ISFATAL"
                            },
                            {
                                "Name": "make",
                                "Value": "APPLE"
                            },
                            {
                                "Name": "deviceType",
                                "Value": "IPAD AIR"
                            },
                            {
                                "Name": "deviceID",
                                "Value": "F920BE29-1321-498A-B5D7-7FA84396DE16"
                            },
                            {
                                "Name": "osName",
                                "Value": "IOS"
                            },
                            {
                                "Name": "ISP",
                                "Value": "TIME WARNER CABLE INTERNET LLC"
                            },
                            {
                                "Name": "Mobile Carrier",
                                "Value": "AT&T"
                            },
                            {
                                "Name":"workflowName",
                                "Value":"CCE_ATTTV_Wifi_Setup"
                            }
                        ],
                        "AdditionalContent": {
                            "longDescription": "You received this error message because the system has captured buffering errors on your device while streaming."
                        }
                    },
                    {
                        "AlertType": "BUFFERINGERRORS",
                        "AlertCode": "CRITICAL_FATALV",
                        "AlertInfo": "ACCOUNT_ALERT",
                        "SkipDismissal": false,
                        "DISMISSAL_EXPIRY_DATE": "",
                        "Content": {
                            "issueTitle": "Buffering Error Detected",
                            "issueDescription": "Buffering Error Detected"
                        },
                        "AlertAdditionalInfo": [
                            {
                                "Name": "reasonCodes",
                                "Value": "CRITICAL_FATALVIDEOERROR_CT"
                            },
                            {
                                "Name": "make",
                                "Value": "APPLE"
                            },
                            {
                                "Name": "deviceType",
                                "Value": "IPHONE 6 PLUS"
                            },
                            {
                                "Name": "deviceID",
                                "Value": "F920BE29-1321-498A-B5D7-7FA84396DE16"
                            },
                            {
                                "Name": "osName",
                                "Value": "IOS"
                            },
                            {
                                "Name": "ISP",
                                "Value": "TIME WARNER CABLE INTERNET LLC"
                            },
                            {
                                "Name": "Mobile Carrier",
                                "Value": "AT&T"
                            },
                            {
                                "Name":"workflowName",
                                "Value":"CCE_DTVN_PLAYER_ERRORS"
                            },
                            {
                                "Name":"workflowName",
                                "Value":"CCE_DTVN_PLAYER_ERRORS"
                            }
                        ],
                        "AdditionalContent": {
                            "longDescription": "You received this error message because the system has captured buffering errors on your device while streaming"
                        }
                    },
                    {
                        "AlertType": "OSUNSUPPORTED",
                        "AlertCode": "N_NOT_SUPPORTED",
                        "AlertInfo": "ACCOUNT_ALERT",
                        "SkipDismissal": false,
                        "DISMISSAL_EXPIRY_DATE": "",
                        "Content": {
                            "issueTitle": "The device you are trying to use with DIRECTV NOW is not supported.",
                            "issueDescription": "The device you are trying to use with DIRECTV NOW is not supported."
                        },
                        "AlertAdditionalInfo": [
                            {
                                "Name": "reasonCodes",
                                "Value": "VSTB_UNSUPPORTED_DEVICE"
                            },
                            {
                                "Name": "make",
                                "Value": "APPLE"
                            },
                            {
                                "Name": "deviceType",
                                "Value": "IPAD AIR"
                            },
                            {
                                "Name": "deviceID",
                                "Value": "F920BE29-1321-498A-B5D7-7FA84396DE16"
                            },
                            {
                                "Name": "osName",
                                "Value": "IOS"
                            },
                            {
                                "Name": "ISP",
                                "Value": "TIME WARNER CABLE INTERNET LLC"
                            },
                            {
                                "Name": "Mobile Carrier",
                                "Value": "AT&T"
                            },
                            {
                                "Name":"workflowName",
                                "Value":"CCE_DTVN_PLAYER_ERRORS"
                            }
                        ],
                        "AdditionalContent": {
                            "longDescription": "<a target='_blank' href='https://www.att.com/esupport/article.html#!/directv-now/KM1200941'>Here</a> is a list of supported devices."
                        }
                    },
                    {
                        "AlertType": "NA",
                        "AlertCode": "NA",
                        "AlertInfo": "NA",
                        "SkipDismissal": false,
                        "DISMISSAL_EXPIRY_DATE": "",
                        "Content": {
                            "issueTitle": "tell me more title",
                            "issueDescription": "tell me more description"
                        },
                        "AlertAdditionalInfo": [
                            {
                                "Name": "reasonCodes",
                                "Value": "NA"
                            },
                            {
                                "Name": "make",
                                "Value": "APPLE"
                            },
                            {
                                "Name": "deviceType",
                                "Value": "IPHONE 6 PLUS"
                            },
                            {
                                "Name": "deviceID",
                                "Value": "FB2468CF-BF73-4DBC-9600-C61553BB759F"
                            },
                            {
                                "Name": "osName",
                                "Value": "IOS"
                            },
                            {
                                "Name": "ISP",
                                "Value": "TIME WARNER CABLE INTERNET LLC"
                            },
                            {
                                "Name": "Mobile Carrier",
                                "Value": "AT&T"
                            }
                        ],
                        "AdditionalContent": {
                            "longDescription": "tell me more long long long description"
                        }
                    }
                ]
            }
        ]
    },
    "content": {
        "code": 200,
        "message": "OK"
    }
}
{
“数据”:{
“DirectvNowDeviceNotifications”:[
{
“帐号”:“180802190357553”,
“警报说明”:[
{
“AlertType”:“BUFFERINGERRORS”,
“警报代码”:“严重”是致命的,
“警报信息”:“帐户警报”,
“Skipdissal”:错误,
“解雇到期日”:“,
“内容”:{
“IssueTile”:“检测到缓冲错误”,
“issueDescription”:“检测到缓冲错误”
},
“AlertAdditionalInfo”:[
{
“名称”:“原因代码”,
“值”:“严重”是致命的
},
{
“名称”:“制造”,
“价值”:“苹果”
},
{
“名称”:“设备类型”,
“价值”:“IPAD AIR”
},
{
“名称”:“设备ID”,
“值”:“F920BE29-1321-498A-B5D7-7FA84396DE16”
},
{
“名称”:“osName”,
“值”:“IOS”
},
{
“名称”:“ISP”,
“价值”:“时代华纳有线互联网有限责任公司”
},
{
“名称”:“移动运营商”,
“价值”:“AT&T”
},
{
“名称”:“workflowName”,
“值”:“CCE\u ATTTV\u Wifi\u设置”
}
],
“附加内容”:{
“longDescription”:“您收到此错误消息,因为系统在流媒体传输时捕获了设备上的缓冲错误。”
}
},
{
“AlertType”:“BUFFERINGERRORS”,
“警报代码”:“严重警报”,
“警报信息”:“帐户警报”,
“Skipdissal”:错误,
“解雇到期日”:“,
“内容”:{
“IssueTile”:“检测到缓冲错误”,
“issueDescription”:“检测到缓冲错误”
},
“AlertAdditionalInfo”:[
{
“名称”:“原因代码”,
“值”:“严重错误”
},
{
“名称”:“制造”,
“价值”:“苹果”
},
{
“名称”:“设备类型”,
“值”:“IPHONE 6 PLUS”
},
{
“名称”:“设备ID”,
“值”:“F920BE29-1321-498A-B5D7-7FA84396DE16”
},
{
“名称”:“osName”,
“值”:“IOS”
},
{
“名称”:“ISP”,
“价值”:“时代华纳有线互联网有限责任公司”
},
{
“名称”:“移动运营商”,
“价值”:“AT&T”
},
{
“名称”:“workflowName”,
“值”:“CCE\u DTVN\u播放器错误”
},
{
“名称”:“workflowName”,
“值”:“CCE\u DTVN\u播放器错误”
}
],
“附加内容”:{
“longDescription”:“您收到此错误消息,因为系统在流媒体传输时捕获了设备上的缓冲错误”
}
},
{
“警报类型”:“OSUNSUPPORTED”,
“警报代码”:“不支持”,
“警报信息”:“帐户警报”,
“Skipdissal”:错误,
“解雇到期日”:“,
“内容”:{
“IssueTile”:“您现在尝试与DIRECTV一起使用的设备
const newGroup = [];
const data = object["data"]["DirectvNowDeviceNotifications"];
(data).forEach((map, index) => {
        Object(map['AlertDescription']).forEach((devices) => {
        if(typeof devices['AlertAdditionalInfo'] !== 'undefined'){
        const deviceType = devices['AlertAdditionalInfo'].find((type) => type.Name ==='deviceType');
        if(typeof deviceType.Value !== 'undefined'){
            if(typeof newGroup[deviceType.Value] === 'undefined'){
            newGroup[deviceType.Value] = [];
          }
            newGroup[deviceType.Value].push(devices);
        }
      }
    })
});