Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Javascript/Jquery中基于多个键对数组项进行分组_Javascript - Fatal编程技术网

如何在Javascript/Jquery中基于多个键对数组项进行分组

如何在Javascript/Jquery中基于多个键对数组项进行分组,javascript,Javascript,我有一个Javascript数组,如下所示 var data = [{ "Ticket_id": "239248", "Order_Issue": "SAP", "Region": "EU", "Line_No": "10", "Line_Issue": "Qty not available", "Serial_Number": "72CEP92"

我有一个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"}]
        }];
所以基本上,我会根据票证id、订单号和地区进行分组。我将添加Items子数组,在其中存储所有行号、行号和序列号

我仅通过一个键成功分组,比如通过Ticket\u id,如下例所示。当我向我的对象添加另一个键时,
obj[item.“Order_-Issue]=obj[item.“Order_-Issue]|[],分组依据将仅在该键上执行,并忽略上一个键。任何建议,请我做错了什么,以及如何获得确切的格式,我想要的。非常感谢。
var数据=[{
“票证号”:“239248”,
“订单发布”:“SAP”,
“区域”:“欧盟”,
“行号”:“10”,
“行出库”:“数量不可用”,
“序列号”:“72CEP92”
},
{
“票证号”:“239248”,
“订单发布”:“SAP”,
“区域”:“欧盟”,
“行号”:“20”,
“行_问题”:“缺少联系信息”,
“序列号”:“2198IE3”
},
{
“票证id”:“239267”,
“订单发布”:“在线支付”,
“区域”:“欧盟”,
“行号”:“10”,
“行发行”:“卡已过期”,
“序列号”:“21BBF03”
}];
var组\行\号=数据。减少(功能(obj,项目){
obj[item.Ticket_id]=obj[item.Ticket_id]| |[];
obj[item.Ticket\u id].push(item.Line\u编号);
返回obj;
}, {});
控制台日志(组行号);
变量组=对象.键(组线号).映射(函数(键){
返回{Ticket\u id:key,Line\u No:group\u Line\u No[key]};
});

控制台日志(组)使用类似的方法,但将所有键属性组合到中间结果对象的键中

var数据=[{
“票证号”:“239248”,
“订单发布”:“SAP”,
“区域”:“欧盟”,
“行号”:“10”,
“行出库”:“数量不可用”,
“序列号”:“72CEP92”
},
{
“票证号”:“239248”,
“订单发布”:“SAP”,
“区域”:“欧盟”,
“行号”:“20”,
“行_问题”:“缺少联系信息”,
“序列号”:“2198IE3”
},
{
“票证id”:“239267”,
“订单发布”:“在线支付”,
“区域”:“欧盟”,
“行号”:“10”,
“行发行”:“卡已过期”,
“序列号”:“21BBF03”
}
];
var组\行\号=数据。减少(功能(obj,项目){
let key=`${item.Ticket\u id}.${item.Order\u Issue}.${item.Region}`;
obj[key]=obj[key]||{
票证号:item.Ticket号,
订单发布:item.Order发布,
地区:项目。地区,
行:[]
};
obj[key].Lines.push({
行号:item.Line号,
行发布:item.Line发布,
序列号:项目。序列号
});
返回obj;
}, {});
变量组=对象值(组线号);

控制台日志(组)
如果您想为任何键的混合使用动态解决方案,您可以使用
reduce
方法,并在内部使用
for…of
循环,检查当前属性是否是分组依据的键或是否应添加到
数组中的新对象

var data=[{“票证号”:“239248”,“订单号”:“SAP”,“地区”:“EU”,“行号”:“10”,“行号”:“数量不可用”,“序列号”:“72CEP92”},{“票证号”:“239248”,“订单号”:“SAP”,“地区”:“EU”,“行号”:“20”,“行号”:“联系信息缺失”,“序列号”:“2198IE3”},{“票证号”:“239267”,“订单号”:“在线支付”,“地区”:“EU,“行号”:“10”,“行号问题”:“卡过期”,“序列号”:“21BBF03”}]
constgroupby=keys=>data.reduce((r,e)=>{
const key=keys.map(k=>e[k]).join(“|”);
常量obj={}
对于(让[k,v]为对象项(e)){
如果(!r[key])r[key]={Lines:[]}
if(包括(k)项){
r[键][k]=v
}否则{
obj[k]=v
}
}
r[key].Lines.push(obj)
返回r;
}, {});
const result=groupBy(['Ticket\u id','Order\u Issue','Region'])

console.log(Object.values(result))
您的操作在正确的轨道上

在处理条目时,您可以通过组合
票证id
订单发布
区域
来创建id。然后按行数据

constgroupentries=arr=>
对象值(
arr.reduce(
(
obj,
{票证id、订单号、地区、行号、行号、序列号}
) => {
const id=[Ticket_id,Order_Issue,Region].join(“#”)//唯一id
obj[id]=obj[id]|{票证id、订单、发行、地区、行:[]}
obj[id].Lines.push({Line\u No,Line\u Issue,Serial\u Number})//推送新行数据
返回obj
},
{}
)
)
常数数据=[
{
票号:239248,
订单问题:“SAP”,
地区:'欧盟',
第10行:,
第_行问题:“数量不可用”,
序列号:“72CEP92”,
},
{
票号:239248,
订单问题:“SAP”,
地区:'欧盟',
第20行:,
行_问题:“缺少联系信息”,
序列号:“2198IE3”,
},
{
票号:239267,
订单问题:“在线支付”,
地区:'欧盟',
第10行:,
第_行问题:“卡过期”,
序列号:“21BBF03”,
},
]
常量结果=组条目(数据)
console.log(结果)