Javascript 根据相同的值对数组进行分组
我的数组是这样的:Javascript 根据相同的值对数组进行分组,javascript,arrays,group-by,Javascript,Arrays,Group By,我的数组是这样的: myArray = [ {SKU: "Hoo12", Name: "ACyrlic watch",OrderNo:"26423764233456"}, {SKU: "S0002", Name: "Princes Geometry",OrderNo:"124963805662313"}, {SKU: "Hoo12", Name:
myArray = [
{SKU: "Hoo12", Name: "ACyrlic watch",OrderNo:"26423764233456"},
{SKU: "S0002", Name: "Princes Geometry",OrderNo:"124963805662313"},
{SKU: "Hoo12", Name: "ACyrlic watch",OrderNo:"122324234234"},
]
I want to convert
OutPut = [
{SKU: "Hoo12",Name: "ACyrlic watch", OrderNo: ["26423764233456", "122324234234"]}
{SKU: "S0002", Name: "Princes Geometry", OrderNo: ["124963805662313"]}
]
我想尝试许多方法,但我只是不知道如何处理相似组值的分组。每当看到分组数组的数据时,reduce都是一个很好的选择 例如
const myArray=[
{SKU:“Hoo12”,名称:“非循环手表”,订单号:“2642376456”},
{SKU:“S0002”,名称:“王子几何”,订单号:“124963805662313”},
{SKU:“Hoo12”,名称:“非循环手表”,订单号:“1223242344”},
];
常量输出=myArray.reduce((a,v)=>{
设c=a.find(f=>f.SKU==v.SKU);
//我们有这个SKU吗。。
如果(!c){
//没有让我们添加
c=v;
c、 OrderNo=[v.OrderNo];
a、 推(c);
}否则{
//是的,让我们添加此订单号。
c、 订单号推送(v.OrderNo);
}
返回a;
}, []);
控制台日志(输出)
如果您不想修改初始的myArray
(纯函数),那么简单的forEach
应该可以
//初始化
myArray=[
{SKU:“Hoo12”,名称:“非循环手表”,订单号:“2642376456”},
{SKU:“S0002”,名称:“Princes Geometry”,订单号:“122324234234”},
{SKU:“Hoo12”,名称:“非循环手表”,订单号:“1223242344”},
]
输出=[]
//对于数组的每个元素
myArray.forEach(元素=>{
//查找与SKU和名称匹配的
let found=OutPut.find(o=>o.SKU==elem.SKU&&o.Name==elem.Name)
//如果存在,请添加订单号
如果(找到){
found.OrderNo.push(elem.OrderNo)
}
//否则将OrderNo作为数组添加对象
否则{
push({SKU:elem.SKU,Name:elem.Name,OrderNo:[elem.OrderNo]})
}
})
//显示输出
设c=document.createElement('pre');
c、 innerText=JSON.stringify(输出,null,2)
document.body.appendChild(c)
使用reduce
方法,您可以实现预期的输出
constMyArray=[{SKU:“Hoo12”,名称:“非循环手表”,订单号:“2642376456”},{SKU:“S0002”,名称:“王子几何”,订单号:“124963805662313”},{SKU:“Hoo12”,名称:“非循环手表”,订单号:“122324234”};
const result=Object.values(myArray.reduce((a,{OrderNo,…r})=>{
a[r.SKU]??={…r,订单号:[]};
a[r.SKU].OrderNo.push(OrderNo)
返回a;
},{}));
控制台日志(结果)代码>请告诉我们您尝试了什么?为什么c#和jquery在标记中?我认为这些都与我们的计划无关question@KrzysztofKrzeszewski我认为jQuery被标记是因为他可能已经尝试过了,但我同意C#what是?=
?@法语谢谢亲爱的。我已经解决了我的问题