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