Javascript 如何在每个循环中对Json对象进行分组

Javascript 如何在每个循环中对Json对象进行分组,javascript,jquery,arrays,foreach,Javascript,Jquery,Arrays,Foreach,您好,我来自php背景,试图通过Javascript/JQuery对一些JSON数据进行分组。我想通过裁剪SKU并将记录分组来对数据进行分组,我已经成功地完成了这项工作,但是我无法将数据放入“children”部分,它似乎只循环第一条记录。理想情况下,子部分应该拥有JSON文件中的所有数据,但按父SKU对它们进行分组 我尝试了以下方法: var项目=[ { 产品类型:“可配置”, 选项:[ { 标签:“尺寸”, 值:“7.5”, 方案编号:190, 期权价值:106 } ], 数量:3, 项目

您好,我来自php背景,试图通过Javascript/JQuery对一些JSON数据进行分组。我想通过裁剪SKU并将记录分组来对数据进行分组,我已经成功地完成了这项工作,但是我无法将数据放入“children”部分,它似乎只循环第一条记录。理想情况下,子部分应该拥有JSON文件中的所有数据,但按父SKU对它们进行分组

我尝试了以下方法:

var项目=[
{
产品类型:“可配置”,
选项:[
{
标签:“尺寸”,
值:“7.5”,
方案编号:190,
期权价值:106
}
],
数量:3,
项目编号:“300”,
产品编号:“88105”,
产品名称:“都铎黑色男鞋”,
产品sku:“M1S-TUD02-AVEL-79-7.5”,
},
{
产品类型:“可配置”,
选项:[
{
标签:“尺寸”,
值:“11”,
方案编号:190,
选项值:99
}
],
数量:3,
项目编号:“298”,
产品编号:“88105”,
产品名称:“都铎黑色男鞋”,
产品sku:“M1S-TUD02-AVEL-79-11”,
},
{
产品类型:“可配置”,
选项:[
{
标签:“尺寸”,
值:“M”,
方案编号:190,
期权价值:66
}
],
数量:1,
项目编号:“111”,
产品编号:“99945”,
产品名称:“女式毛衣”,
产品sku:“W1R-613K-A10400-96-M”,
},
{
产品类型:“可配置”,
选项:[
{
标签:“尺寸”,
值:“L”,
方案编号:190,
期权价值:12
}
],
数量:20,
项目编号:“278”,
产品编号:“99945”,
产品名称:“女式毛衣”,
产品sku:“W1R-613K-A10400-96-L”,
},
];
var groupedItems={};
$。每个(项目、功能(键、项目){
如果(item.product_type==“可配置”){
var sku=物料、产品和sku,
parentSku=sku.replace(sku.substring(sku.lastIndexOf(“-”),”);
如果(sku.indexOf(父sku)>=0){
groupedItems[parentSku]={
产品sku:parentSku,
产品名称:item.product\u名称,
产品类型:item.product\u类型,
儿童:[项目]
};
}
}
});
console.log(groupedItems)

包裹沙箱
试试看

var项目=[
{
产品类型:“可配置”,
选项:[
{
标签:“尺寸”,
值:“7.5”,
方案编号:190,
期权价值:106
}
],
数量:3,
项目编号:“300”,
产品编号:“88105”,
产品名称:“都铎黑色男鞋”,
产品sku:“M1S-TUD02-AVEL-79-7.5”,
},
{
产品类型:“可配置”,
选项:[
{
标签:“尺寸”,
值:“11”,
方案编号:190,
选项值:99
}
],
数量:3,
项目编号:“298”,
产品编号:“88105”,
产品名称:“都铎黑色男鞋”,
产品sku:“M1S-TUD02-AVEL-79-11”,
},
{
产品类型:“可配置”,
选项:[
{
标签:“尺寸”,
值:“M”,
方案编号:190,
期权价值:66
}
],
数量:1,
项目编号:“111”,
产品编号:“99945”,
产品名称:“女式毛衣”,
产品sku:“W1R-613K-A10400-96-M”,
},
{
产品类型:“可配置”,
选项:[
{
标签:“尺寸”,
值:“L”,
方案编号:190,
期权价值:12
}
],
数量:20,
项目编号:“278”,
产品编号:“99945”,
产品名称:“女式毛衣”,
产品sku:“W1R-613K-A10400-96-L”,
},
];
var groupedItems={};
items.forEach(x=>{
设k=x.product_sku.replace(/-[^-]*?$/,'');
设g=groupedItems[k]| |[];
g、 推(x);
groupedItems[k]=g;
})

console.log(groupedItems)您可以使用
reduce
产品sku进行分组

var项目=[{
产品类型:“可配置”,
选项:[{
标签:“尺寸”,
值:“7.5”,
方案编号:190,
期权价值:106
}],
数量:3,
项目编号:“300”,
产品编号:“88105”,
产品名称:“都铎黑色男鞋”,
产品sku:“M1S-TUD02-AVEL-79-7.5”,
},
{
产品类型:“可配置”,
选项:[{
标签:“尺寸”,
值:“11”,
方案编号:190,
选项值:99
}],
数量:3,
项目编号:“298”,
产品编号:“88105”,
产品名称:“都铎黑色男鞋”,
产品sku:“M1S-TUD02-AVEL-79-11”,
},
{
产品类型:“可配置”,
选项:[{
标签:“尺寸”,
值:“M”,
方案编号:190,
期权价值:66
}],
数量:1,
项目编号:“111”,
产品编号:“99945”,
产品名称:“女式毛衣”,
产品sku:“W1R-613K-A10400-96-M”,
},
{
产品类型:“可配置”,
选项:[{
标签:“尺寸”,
值:“L”,
方案编号:190,
期权价值:12
}],
数量:20,
项目编号:“278”,
产品编号:“99945”,
产品名称:“女式毛衣”,
产品sku:“W1R-613K-A10400-96-L”,
},
];
var groupedItems=items.reduce((acc,item)=>{
如果(item.product_type==“可配置”){
var sku=物料、产品和sku;
var parentSku=sku.replace(sku.substring(sku.lastIndexOf(“-”),”);
如果(sku.indexOf(父sku)>=0){
如果(!!acc[parentSku]){
let children=acc[parentSku]。children;
acc[parentSku]。子项=[…子项,{…项
}];
}否则{
acc[parentSku]={
产品sku:parentSku,
产品名称:item.product\u名称,
产品类型:item.product\u类型,
儿童:[项目]
};
}
}
}
返回acc;
}, []);

console.log(groupedItems)能否提供预期输出的示例?在问题中,请打开开发人员工具并检查控制台
items.forEach(x => {
  let k=x.product_sku.replace(/-[^-]*?$/,'');
  let g=groupedItems[k]||[];
  g.push(x);
  groupedItems[k]=g;
})