gpt4 book ai didi

javascript - 如何根据 Javascript/Jquery 中的多个键对数组项进行分组

转载 作者:行者123 更新时间:2023-12-03 16:45:32 25 4
gpt4 key购买 nike

我有一个如下所示的 Javascript 数组

var data = [{
"Ticket_id": "239248",
"Order_Issue": "SAP",
"Region": "EU",
"Line_No": "10",
"Line_Issue": "Qty not available",
"Serial_Number": "72CEP92"
},
{
"Ticket_id": "239248",
"Order_Issue": "SAP",
"Region": "EU",
"Line_No": "20",
"Line_Issue": "contact info missing",
"Serial_Number": "2198IE3"
}];

我想按多个键对我的数组进行分组。结果应如下所示:

var data = [{
"Ticket_id": "239248",
"Order_Issue": "SAP",
"Region": "EU",
"Lines" : [
{"Line_No": "10",
"Line_Issue": "Qty not available",
"Serial_Number": "72CEP92"},
{"Line_No": "20",
"Line_Issue": "contact info missing",
"Serial_Number": "2198IE3"}]
}];

基本上,我将按 Ticket_id、Order_Issue 和 Region 进行分组。我将添加 Items 子数组,我将在其中存储所有 Line_No、Line_Issue 和 Serial_Number。

我成功地仅通过一个键进行分组,让我们通过 Ticket_id 进行分组,如下例所示。当我向我的对象添加另一个键时 obj[item."Order_Issue] = obj[item."Order_Issue] || [];,group by 将只在该键上完成,而忽略前一个键。任何建议请问我做错了什么以及如何获得我想要的确切格式。谢谢你。

var data = [{
"Ticket_id": "239248",
"Order_Issue": "SAP",
"Region": "EU",
"Line_No": "10",
"Line_Issue": "Qty not available",
"Serial_Number": "72CEP92"
},
{
"Ticket_id": "239248",
"Order_Issue": "SAP",
"Region": "EU",
"Line_No": "20",
"Line_Issue": "contact info missing",
"Serial_Number": "2198IE3"
},
{
"Ticket_id": "239267",
"Order_Issue": "Online Payment",
"Region": "EU",
"Line_No": "10",
"Line_Issue": "card expired",
"Serial_Number": "21BBF03"
}];

var group_Line_No = data.reduce(function (obj, item) {
obj[item.Ticket_id] = obj[item.Ticket_id] || [];
obj[item.Ticket_id].push(item.Line_No);
return obj;
}, {});

console.log(group_Line_No);

var groups = Object.keys(group_Line_No).map(function (key) {
return {Ticket_id: key, Line_No: group_Line_No[key]};
});

console.log(groups);

最佳答案

如果您想为任何键组合提供动态解决方案,您可以使用 reduce 方法并在内部使用 for...of 循环并检查当前属性是否为键分组或应添加到 Lines 数组中的新对象。

var data = [{"Ticket_id":"239248","Order_Issue":"SAP","Region":"EU","Line_No":"10","Line_Issue":"Qty not available","Serial_Number":"72CEP92"},{"Ticket_id":"239248","Order_Issue":"SAP","Region":"EU","Line_No":"20","Line_Issue":"contact info missing","Serial_Number":"2198IE3"},{"Ticket_id":"239267","Order_Issue":"Online Payment","Region":"EU","Line_No":"10","Line_Issue":"card expired","Serial_Number":"21BBF03"}]

const groupBy = keys => data.reduce((r, e) => {
const key = keys.map(k => e[k]).join('|');
const obj = {}

for (let [k, v] of Object.entries(e)) {
if (!r[key]) r[key] = {Lines: []}

if (keys.includes(k)) {
r[key][k] = v
} else {
obj[k] = v
}
}

r[key].Lines.push(obj)
return r;
}, {});

const result = groupBy(['Ticket_id', 'Order_Issue', 'Region'])
console.log(Object.values(result))

关于javascript - 如何根据 Javascript/Jquery 中的多个键对数组项进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60157014/

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