Javascript 更改对象结构
我有一个对象数组:Javascript 更改对象结构,javascript,arrays,Javascript,Arrays,我有一个对象数组: const res = [ { KIND_ID: 2229, NAME: "Group", SKU_ID: 311, ARTICLE_NAME: "Product one", WEEK: 202027, FORECAST: 81928.37, PROMO: 0, SALES: 92848, SAFETY_STOCK: 57704.79, STORES_C
const res = [
{
KIND_ID: 2229,
NAME: "Group",
SKU_ID: 311,
ARTICLE_NAME: "Product one",
WEEK: 202027,
FORECAST: 81928.37,
PROMO: 0,
SALES: 92848,
SAFETY_STOCK: 57704.79,
STORES_COUNT: 132,
ADD_FCST: null
},
{
KIND_ID: 2229,
NAME: "Group",
SKU_ID: 311,
ARTICLE_NAME: "Product one",
WEEK: 202028,
FORECAST: 84278.85,
PROMO: 0,
SALES: null,
SAFETY_STOCK: 64000.39,
STORES_COUNT: 144,
ADD_FCST: null
},
{
KIND_ID: 2229,
NAME: "Group",
SKU_ID: 316,
ARTICLE_NAME: "Product two",
WEEK: 202027,
FORECAST: 89112.97,
PROMO: 0,
SALES: 98007,
SAFETY_STOCK: 59509.31,
STORES_COUNT: 142,
ADD_FCST: null
},
{
KIND_ID: 2229,
NAME: "Group",
SKU_ID: 316,
ARTICLE_NAME: "Product two",
WEEK: 202028,
FORECAST: 85129.4,
PROMO: 0,
SALES: null,
SAFETY_STOCK: 63409.61,
STORES_COUNT: 144,
ADD_FCST: null
}
];
我想在几周内对一些字段进行分组,例如:
const expected = [
{
KIND_ID: 2229,
NAME: "Group",
SKU_ID: 311,
ARTICLE_NAME: "Product one",
FORECAST: [{ 202026: 97555.64 }, { 202027: 98336.45 }],
PROMO: [{ 202026: 0 }, { 202027: 0 }],
SALES: [{ 202026: 95911.77 }, { 202027: null }],
SAFETY_STOCK: [{ 202026: 63622.28 }, { 202027: 72852.62 }],
STORES_COUNT: [{ 202026: 135 }, { 202027: 143 }],
ADD_FCST: [{ 202026: null }, { 202027: null }]
},
{
KIND_ID: 2229,
NAME: "Group",
SKU_ID: 316,
ARTICLE_NAME: "Product two",
FORECAST: [{ 202026: 104125.69 }, { 202027: 101147.07 }],
PROMO: [{ 202026: 0 }, { 202027: 0 }],
SALES: [{ 202026: 102281 }, { 202027: null }],
SAFETY_STOCK: [{ 202026: 53709.55 }, { 202027: 60675.26 }],
STORES_COUNT: [{ 202026: 143 }, { 202027: 144 }],
ADD_FCST: [{ 202026: null }, { 202027: null }]
}
];
如果有帮助,我需要对周数组和值进行分组:
const weeks = [202027, 202028];
const keys = ['FORECAST','PROMO','SALES','SAFETY_STOCK','STORES_COUNT','ADD_FCST'];
我试图用reduce和下划线方法groupBy来解决这个问题,但这没有帮助。如何将此res数组分组到预期值
虚拟文本,因为:看起来你的文章大部分是代码;请添加更多详细信息。但这就是我想告诉大家的
我试图用reduce解决的问题
这就是我要使用的,虽然有几个步骤,因为这不是一个经典的分组示意图
下面是一个例子
const res=[{KIND_ID:2229,NAME:“Group”,SKU_ID:311,ARTICLE_NAME:“Product one”,周数:202027,预测:81928.37,促销:0,销售额:92848,安全库存:57704.79,门店数量:132,ADD_FCST:null},{KIND_ID:2229,NAME:“Group”,SKU ID:311,ARTICLE_NAME:“Product one”周:202028,预测:84278.85,促销:0,销售:空,安全库存:64000.39,门店数量:144,添加数量:空,{种类ID:2229,名称:“集团”,SKU ID:316,商品名称:“产品二”,周:202027,预测:89112.97,促销:0,销售:98007,安全库存:59509.31,门店数量:142,添加数量:空,{种类ID:2229,名称:“集团”,SKU ID:316,商品名称:“产品二”,周数:202028,预测:85129.4,促销:0,销售:空,安全库存:63409.61,门店数量:144,添加(FCST:空)};
常量grpFields=[“预测”、“促销”、“销售”、“安全库存”,
“存储计数”、“添加计数”];
常数o=res.reduce((a,v)=>{
const{KIND\u ID,NAME,SKU\u ID,ARTICLE\u NAME}=v;
设f=a.find(f=>f.SKU\u ID==v.SKU\u ID);
如果(!f){
f={KIND\u ID,NAME,SKU\u ID,ARTICLE\u NAME};
forEach(k=>f[k]=[]);
a、 推(f);
}
forEach(k=>f[k].push({[v.WEEK]:v[k]}));
返回a;
},[]);
控制台日志(o)代码>请详细说明用于获得预期输出的方法。能改善这个问题的是简单性。这能回答你的问题吗?如何使这个“o”函数更灵活,而不需要硬编码变量“种类ID、名称、SKU ID、文章名称”?例如,我想用其他字段修改res数组,但按grpFields分组。@Denis更新为包含通用版本。