gpt4 book ai didi

javascript - 如何对数组对象进行分组以获得所需的数据格式?

转载 作者:行者123 更新时间:2023-12-04 08:33:54 27 4
gpt4 key购买 nike

我试图使用这个对象数组对我的对象数据进行分组:

var data = [ 
{ IdUser: 8, Name: "John Smith", transferType: 'download', total: 6 },
{ IdUser: 12, Name: "Jane Smith", transferType: 'download', total: 15 },
{ IdUser: 11, Name: "Joe Smith", transferType: 'download', total: 20 },
{ IdUser: 12, Name: "Jane Smith", transferType: 'upload', total: 7 },
{ IdUser: 11, Name: "Joe Smith", transferType: 'upload', total: 16 },
{ IdUser: 8, Name: "John Smith", transferType: 'upload', total: 12 }
];
将所有对象的这种所需输出格式放入新数组中:
  [
{
IdUser: 8,
Name: 'John Smith',
download: [{ IdUser: 8, Name: "John Smith", transferType: 'download', total: 6}],
upload: [{ IdUser: 8, Name: "John Smith", transferType: 'upload', total: 12 }]
},
{
IdUser: 12,
Name: 'Jane Smith',
donwload: [{ IdUser: 12, Name: "Jane Smith", transferType: 'download', total: 15 }],
upload: [{ IdUser: 12, Name: "Jane Smith", transferType: 'upload', total: 7 }]
},
{
IdUser: 11,
Name: 'Joe Smith',
download: [{ IdUser: 11, Name: "Joe Smith", transferType: 'download', total: 20 }],
upload: [{ IdUser: 11, Name: "Joe Smith", transferType: 'upload', total: 16 }]
}
];
我尝试使用 reduce 函数,但它不是我想要的格式:
data.reduce(function (a, b) {
a[b.Name] = a[b.Name] || [];
a[b.Name]["IdUser"] = b.IdUser;
a[b.Name][b.transferType] = a[b.Name][b.transferType] || [];
a[b.Name][b.transferType].push(b);
return a;
}, []);

最佳答案

我建议你做2次。
第一次使用分组功能按 IdUser 对数据进行分组。
然后使用 for in 循环:

var data = [
{
"IdUser": 8,
"Name": "John Smith",
"transferType": "download",
"total": 6
},
{
"IdUser": 12,
"Name": "Jane Smith",
"transferType": "download",
"total": 15
},
{
"IdUser": 11,
"Name": "Joe Smith",
"transferType": "downloaded",
"total": 20
},
{
"IdUser": 12,
"Name": "Jane Smith",
"transferType": "upload",
"total": 7
},
{
"IdUser": 11,
"Name": "Joe Smith",
"transferType": "upload",
"total": 16
},
{
"IdUser": 8,
"Name": "John Smith",
"transferType": "upload",
"total": 12
}
];

var groupBy = function(xs, key) {
return xs.reduce(function(rv, x) {
(rv[x[key]] = rv[x[key]] || []).push(x);
return rv;
}, {});
};
var tmp = groupBy(data, 'IdUser');

var formattedData = [];
for(var id in tmp ){
formattedData.push({
"IdUser": id,
"Name": tmp[id][0].Name,
"download": tmp[id].filter(obj => obj.transferType == "download"),
"upload":tmp[id].filter(obj => obj.transferType == "upload")
})
}
console.log(formattedData)

关于javascript - 如何对数组对象进行分组以获得所需的数据格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64898252/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com