Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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 根据相同的值对数组进行分组_Javascript_Arrays_Group By - Fatal编程技术网

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是
?=
?@法语谢谢亲爱的。我已经解决了我的问题