(这是一个与前一个问题类似但更复杂的场景)
我有一个数组originalArrayData,如下所示:
originalArrayData = [{
"16": {
"id": 22,
"grid_row_id": 5,
"grid_col_id": 16,
"data": "10",
"created_at": "rertte",
"error_mgs": null
},
"header": "BUTTERFLY HEADER",
"id": 5
},
{
"17": {
"id": 31,
"grid_row_id": 9,
"grid_col_id": 16,
"data": "14",
"created_at": "rtyhtyjtdyj",
"error_mgs": null
},
"header": "BUTTERFLY HEADER",
"id": 6
},
{
"18": {
"id": 35,
"grid_row_id": 9,
"grid_col_id": 12,
"data": "55",
"created_at": "thrtuhrs",
"error_mgs": null
},
"header": "PARROT HEADER",
"id": 6
},
{
"19": {
"id": 36,
"grid_row_id": 9,
"grid_col_id": 12,
"data": "31",
"created_at": "rtyhtyjtdyj",
"error_mgs": null
},
"header": "PARROT HEADER",
"id": 7
},
{
"20": {
"id": 36,
"grid_row_id": 9,
"grid_col_id": 14,
"data": "31",
"created_at": "rtyhtyjtdyj",
"error_mgs": null
},
"header": "OTHER HEADER",
"id": 7
}...........
假设我有一个ID数组(这些数字可能是随机的,并不总是2.可能有1、3等数组项)
arrayOfIds: [16 , 12]
如果grid\u col\u id的值存在于arrayOfIds中的任何位置,那么对于具有相同grid\u col\u id的每个对象,如何使用使用"header"值生成的新键创建新数组,并且这些键的值是具有相同grid\u col\u id的所有项的"data"值之和.
目标/预期输出:
100
说明:如果查看originalArrayData中的每个项目(本例中有4个,但可以有很多),前2个项目具有相同的grid\u col\u id和相同的标题.对于这两个变量,"data"="10"和"14",加起来就是24.因此,您有"butterflyheader":24.
同样的逻辑也可以应用于parrotheader.所有新键都是每个对象的原始"标头"的小写和无空格版本.
不包括标题为"其他标题"的项目,因为其grid\u col\u id在arrayOfIds中不存在.
为了解决这个问题,我有以下代码:
// creates an array of all of the innermost objects in the original array
let tableDataFiltered = originalArrayData.map(item =>
Object.values(item).filter(item => typeof item === "object")
).flat()
// Retrieve all items with the relevant grid_col_id
tableDataFiltered.filter(item => arrayOfIds.includes(item.grid_col_id))
// Headers to use as keys
let headersAsKeys = tableDataFiltered.forEach(item => {
item.header.toLowerCase().split(' ').join(''))
})
Object.values(tableDataFiltered.reduce((acc, curr) => {
acc[curr.category] = 'None';
headersAsKeys.forEach(key => {
acc[curr.category][key] += curr[key];
})
return acc;
}, {}));
但是,它会生成HeaderSaskey.forEach不是一个函数.
如何实现目标数组=&燃气轮机;
100