如何按数组对象分组并使用值键javascript创建数组
如何根据值按数组对象分组以创建新的值数组对象 输入如何按数组对象分组并使用值键javascript创建数组,javascript,node.js,adonis.js,Javascript,Node.js,Adonis.js,如何根据值按数组对象分组以创建新的值数组对象 输入 var promotions = [ { "promotionID": 2, "id": 1, "qty": 1, "productID": 1, "product": "Nu Milk Tea 330ml", "
var promotions = [
{
"promotionID": 2,
"id": 1,
"qty": 1,
"productID": 1,
"product": "Nu Milk Tea 330ml",
"operator": null
}, {
"promotionID": 2,
"id": 2,
"qty": 2,
"productID": 2,
"product": "Product testing 2",
"operator": 1
}, {
"promotionID": 2,
"id": 3,
"qty": 3,
"productID": 3,
"product": "Golda Coffee Dolce Latte 200ml",
"operator": 2
}, {
"promotionID": 3,
"id": 4,
"qty": 8,
"productID": 54,
"product": "Masker Skrineer 3ply Motif 5pcs",
"operator": null
}, {
"promotionID": 3,
"id": 5,
"qty": 5,
"productID": 53,
"product": "Masker Skrineer 1ply Grey 5pcs",
"operator": 2
}, {
"promotionID": 3,
"id": 6,
"qty": 5,
"productID": 52,
"product": "Oronamin C Drink 120ml",
"operator": 1
}]
[
{
"promotionID": 2,
"data" : [
{
"promotionID": 2,
"id": 1,
"qty": 1,
"productID": 1,
"product": "Nu Milk Tea 330ml",
"operator": null
}, {
"promotionID": 2,
"id": 2,
"qty": 2,
"productID": 2,
"product": "Product testing 2",
"operator": 1
}, {
"promotionID": 2,
"id": 3,
"qty": 3,
"productID": 3,
"product": "Golda Coffee Dolce Latte 200ml",
"operator": 2
}
]
},
{
"promotionID": 3,
"data" : [
{
"promotionID": 3,
"id": 4,
"qty": 8,
"productID": 54,
"product": "Masker Skrineer 3ply Motif 5pcs",
"operator": null
}, {
"promotionID": 3,
"id": 5,
"qty": 5,
"productID": 53,
"product": "Masker Skrineer 1ply Grey 5pcs",
"operator": 2
}, {
"promotionID": 3,
"id": 6,
"qty": 5,
"productID": 52,
"product": "Oronamin C Drink 120ml",
"operator": 1
}
]
}
]
我想创建一个按promotionID
预期产出
var promotions = [
{
"promotionID": 2,
"id": 1,
"qty": 1,
"productID": 1,
"product": "Nu Milk Tea 330ml",
"operator": null
}, {
"promotionID": 2,
"id": 2,
"qty": 2,
"productID": 2,
"product": "Product testing 2",
"operator": 1
}, {
"promotionID": 2,
"id": 3,
"qty": 3,
"productID": 3,
"product": "Golda Coffee Dolce Latte 200ml",
"operator": 2
}, {
"promotionID": 3,
"id": 4,
"qty": 8,
"productID": 54,
"product": "Masker Skrineer 3ply Motif 5pcs",
"operator": null
}, {
"promotionID": 3,
"id": 5,
"qty": 5,
"productID": 53,
"product": "Masker Skrineer 1ply Grey 5pcs",
"operator": 2
}, {
"promotionID": 3,
"id": 6,
"qty": 5,
"productID": 52,
"product": "Oronamin C Drink 120ml",
"operator": 1
}]
[
{
"promotionID": 2,
"data" : [
{
"promotionID": 2,
"id": 1,
"qty": 1,
"productID": 1,
"product": "Nu Milk Tea 330ml",
"operator": null
}, {
"promotionID": 2,
"id": 2,
"qty": 2,
"productID": 2,
"product": "Product testing 2",
"operator": 1
}, {
"promotionID": 2,
"id": 3,
"qty": 3,
"productID": 3,
"product": "Golda Coffee Dolce Latte 200ml",
"operator": 2
}
]
},
{
"promotionID": 3,
"data" : [
{
"promotionID": 3,
"id": 4,
"qty": 8,
"productID": 54,
"product": "Masker Skrineer 3ply Motif 5pcs",
"operator": null
}, {
"promotionID": 3,
"id": 5,
"qty": 5,
"productID": 53,
"product": "Masker Skrineer 1ply Grey 5pcs",
"operator": 2
}, {
"promotionID": 3,
"id": 6,
"qty": 5,
"productID": 52,
"product": "Oronamin C Drink 120ml",
"operator": 1
}
]
}
]
您可以使用
reduce
按promotionId对促销进行分组,然后映射条目以获得最终结果
var促销=[
{
推广类别:二,,
id:1,
数量:1,
产品编号:1,
产品:“Nu奶茶330ml”,
操作员:空
},
{
推广类别:二,,
id:2,
数量:2,
产品编号:2,
产品:“产品测试2”,
接线员:1
},
{
推广类别:二,,
id:3,
数量:3,
产品编号:3,
产品:“Golda Coffee Dolce Latte 200毫升”,
接线员:2
},
{
推广编号:3,,
id:4,
数量:8,
产品编号:54,
产品:“面具Skrineer 3ply图案5pcs”,
操作员:空
},
{
推广编号:3,,
id:5,
数量:5,
产品编号:53,,
产品:“遮罩Skrineer 1件灰色5件”,
接线员:2
},
{
推广编号:3,,
id:6,
数量:5,
产品编号:52,,
产品:“奥罗那明C饮料120ml”,
接线员:1
}
]
const res=Array.from(
促销
.减少((acc,促销)=>{
附件组(
promotion.promotionID,
(acc.get(promotion.promotionID)| |[])concat(promotion)
)
返回acc
},新地图)
.entries(),
([promotionId,data])=>({promotionId,data})
)
console.log(res)
这是我的答案
var促销=[
{
推广类别:二,,
id:1,
数量:1,
产品编号:1,
产品:“Nu奶茶330ml”,
运算符:空,
},
{
推广类别:二,,
id:2,
数量:2,
产品编号:2,
产品:“产品测试2”,
接线员:1,,
},
{
推广类别:二,,
id:3,
数量:3,
产品编号:3,
产品:“Golda Coffee Dolce Latte 200毫升”,
接线员:2,,
},
{
推广编号:3,,
id:4,
数量:8,
产品编号:54,
产品:“面具Skrineer 3ply图案5pcs”,
运算符:空,
},
{
推广编号:3,,
id:5,
数量:5,
产品编号:53,,
产品:“遮罩Skrineer 1件浅灰色5件”,
接线员:2,,
},
{
推广编号:3,,
id:6,
数量:5,
产品编号:52,,
产品:“奥罗那明C饮料120ml”,
接线员:1,,
},
];
const objectPromotion={};
对于(促销中的索引){
const dataPromotion=objectPromotion[promotions[index].promotionID];
log(“dataPromotion”,dataPromotion)
if(数据促销){
dataPromotion.push(促销[索引]);
}否则{
objectPromotion[promotions[index].promotionID]=[promotions[index]];
}
}
const result=Object.keys(objectPromotion.map)(项目)=>{
返回{
促销ID:项目,
数据:objectPromotion[项目],
};
});
log(“result”,result)
您应该像这样使用lodash
const _ = require('lodash');
let filteredPromotions=_.groupBy(promotions,'promotionID');
输出:
{
'2': [
{
promotionID: 2,
id: 1,
qty: 1,
productID: 1,
product: 'Nu Milk Tea 330ml',
operator: null
},
{
promotionID: 2,
id: 2,
qty: 2,
productID: 2,
product: 'Product testing 2',
operator: 1
},
{
promotionID: 2,
id: 3,
qty: 3,
productID: 3,
product: 'Golda Coffee Dolce Latte 200ml',
operator: 2
}
],
'3': [
{
promotionID: 3,
id: 4,
qty: 8,
productID: 54,
product: 'Masker Skrineer 3ply Motif 5pcs',
operator: null
},
{
promotionID: 3,
id: 5,
qty: 5,
productID: 53,
product: 'Masker Skrineer 1ply Grey 5pcs',
operator: 2
},
{
promotionID: 3,
id: 6,
qty: 5,
productID: 52,
product: 'Oronamin C Drink 120ml',
operator: 1
}
]
}
[
{
"promotionID": 2,
"data" : [
{
"promotionID": 2,
"id": 1,
"qty": 1,
"productID": 1,
"product": "Nu Milk Tea 330ml",
"operator": null
}, {
"promotionID": 2,
"id": 2,
"qty": 2,
"productID": 2,
"product": "Product testing 2",
"operator": 1
}, {
"promotionID": 2,
"id": 3,
"qty": 3,
"productID": 3,
"product": "Golda Coffee Dolce Latte 200ml",
"operator": 2
}
]
},
{
"promotionID": 3,
"data" : [
{
"promotionID": 3,
"id": 4,
"qty": 8,
"productID": 54,
"product": "Masker Skrineer 3ply Motif 5pcs",
"operator": null
}, {
"promotionID": 3,
"id": 5,
"qty": 5,
"productID": 53,
"product": "Masker Skrineer 1ply Grey 5pcs",
"operator": 2
}, {
"promotionID": 3,
"id": 6,
"qty": 5,
"productID": 52,
"product": "Oronamin C Drink 120ml",
"operator": 1
}
]
}
]
要获得准确的输出,请添加这些行:
filteredPropomotions = Object.keys(filteredPropomotions).map((key, index)=> {return{promotionID:key,data:filteredPropomotions[key]}}
);
输出:
{
'2': [
{
promotionID: 2,
id: 1,
qty: 1,
productID: 1,
product: 'Nu Milk Tea 330ml',
operator: null
},
{
promotionID: 2,
id: 2,
qty: 2,
productID: 2,
product: 'Product testing 2',
operator: 1
},
{
promotionID: 2,
id: 3,
qty: 3,
productID: 3,
product: 'Golda Coffee Dolce Latte 200ml',
operator: 2
}
],
'3': [
{
promotionID: 3,
id: 4,
qty: 8,
productID: 54,
product: 'Masker Skrineer 3ply Motif 5pcs',
operator: null
},
{
promotionID: 3,
id: 5,
qty: 5,
productID: 53,
product: 'Masker Skrineer 1ply Grey 5pcs',
operator: 2
},
{
promotionID: 3,
id: 6,
qty: 5,
productID: 52,
product: 'Oronamin C Drink 120ml',
operator: 1
}
]
}
[
{
"promotionID": 2,
"data" : [
{
"promotionID": 2,
"id": 1,
"qty": 1,
"productID": 1,
"product": "Nu Milk Tea 330ml",
"operator": null
}, {
"promotionID": 2,
"id": 2,
"qty": 2,
"productID": 2,
"product": "Product testing 2",
"operator": 1
}, {
"promotionID": 2,
"id": 3,
"qty": 3,
"productID": 3,
"product": "Golda Coffee Dolce Latte 200ml",
"operator": 2
}
]
},
{
"promotionID": 3,
"data" : [
{
"promotionID": 3,
"id": 4,
"qty": 8,
"productID": 54,
"product": "Masker Skrineer 3ply Motif 5pcs",
"operator": null
}, {
"promotionID": 3,
"id": 5,
"qty": 5,
"productID": 53,
"product": "Masker Skrineer 1ply Grey 5pcs",
"operator": 2
}, {
"promotionID": 3,
"id": 6,
"qty": 5,
"productID": 52,
"product": "Oronamin C Drink 120ml",
"operator": 1
}
]
}
]
我会使用for循环,或者甚至是array reduce方法,因为array.from接受第二个参数,一个map函数,你可以替换
).map(([promotionId,data])=>({promotionId,data}))
和,([promotionId,data])=>({promotionId,data}))
(当你的答案出现时我就是这样写的)@JaromandaX cool,更新了我的答案。谢谢你的建议,你也可以只做newmap
,而不是newmap()
(我喜欢尽量减少代码:p@JaromandaX哈哈,不用担心,我喜欢这样。但是我想知道为什么没有括号它仍然有效。看…语法是新构造函数[([arguments])]
…任何[]中的东西
是可选的…javascript是这样编写的-我想在36k拨号的日子里,尽可能保存两个字符是很重要的:p