Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.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_Concatenation_Merging Data - Fatal编程技术网

Javascript 在不影响排序顺序的情况下,在两个数组下面合并/合并的最佳方法是什么?

Javascript 在不影响排序顺序的情况下,在两个数组下面合并/合并的最佳方法是什么?,javascript,arrays,concatenation,merging-data,Javascript,Arrays,Concatenation,Merging Data,示例阵列如下所示: var aa = [{date: "sep", data:[1,2,3]}, {date: "oct", data:[4,5,6]}]; var bb = [{date: "oct", data:[1,2,3]}, {date: "nov", data:[40,50,60]}, {date: "dec", data:[41,51,61]}]; 合并后的结果应如下所示: var mergedArray = [ {date: "sep", data:[1,2,

示例阵列如下所示:

   var aa = [{date: "sep", data:[1,2,3]}, {date: "oct", data:[4,5,6]}];
   var bb = [{date: "oct", data:[1,2,3]}, {date: "nov", data:[40,50,60]}, {date: "dec", data:[41,51,61]}];
合并后的结果应如下所示:

  var mergedArray =
 [
{date: "sep", data:[1,2,3]},
{date: "oct", data:[4,5,6,1,2,3]},
{date: "nov", data:[40,50,60]},
{date: "dec", data:[41,51,61]}
]
您可以使用
.reduce()
将两个对象数组缩减为一个对象,其中对象的键为每个
日期
,每个
日期
存储对整个对象的引用。但是,如果出现重复的日期(即:累积对象中已存在该日期),则可以将该数组添加到已存在的数组上。最后,使用我们最初创建的日期顺序数组,您可以将结果对象映射到一个合并对象数组中,如下所示:

const aa=[{date:“sep”,数据:[1,2,3]},{date:“oct”,数据:[4,5,6]}];
const bb=[{日期:“十月”,数据:[1,2,3]},{日期:“十一月”,数据:[40,50,60]},{日期:“十二月”,数据:[41,51,61]};
const merged=[…aa,…bb];
const order=[…新集合(merged.map({date}=>date));
const mergedObj=merged.reduce((acc,{date,data,…rest})=>{
acc[日期]=acc[日期]|{日期,…剩余,数据:[]};
acc[date].data=acc[date].data.concat(数据);
返回acc;
}, {});
const res=order.map(key=>mergedObj[key]);
控制台日志(res)
您可以使用
.reduce()
将两个对象数组缩减为一个对象,其中对象的键为每个
日期
,每个
日期
存储对整个对象的引用。但是,如果出现重复的日期(即:累积对象中已存在该日期),则可以将该数组添加到已存在的数组上。最后,使用我们最初创建的日期顺序数组,您可以将结果对象映射到一个合并对象数组中,如下所示:

const aa=[{date:“sep”,数据:[1,2,3]},{date:“oct”,数据:[4,5,6]}];
const bb=[{日期:“十月”,数据:[1,2,3]},{日期:“十一月”,数据:[40,50,60]},{日期:“十二月”,数据:[41,51,61]};
const merged=[…aa,…bb];
const order=[…新集合(merged.map({date}=>date));
const mergedObj=merged.reduce((acc,{date,data,…rest})=>{
acc[日期]=acc[日期]|{日期,…剩余,数据:[]};
acc[date].data=acc[date].data.concat(数据);
返回acc;
}, {});
const res=order.map(key=>mergedObj[key]);

控制台日志(res)您可以在一个for循环中完成此操作。

常数aa=[{日期:“九月”,数据:[1,2,3]},{日期:“十月”,数据:[4,5,6]}];
const bb=[{日期:“十月”,数据:[1,2,3]},{日期:“十一月”,数据:[40,50,60]},{日期:“十二月”,数据:[41,51,61]};
设tempArr=aa;
bb.forEach(rec=>{
让findIndex=tempArr.findIndex(obj=>obj.date==rec.date);
如果(findIndex==-1){
tempArr.push(rec);
}否则{
tempArr[findIndex].data=tempArr[findIndex].data.concat(rec.data);
}
});

控制台日志(tempArr)您可以在一个for循环中完成此操作。

常数aa=[{日期:“九月”,数据:[1,2,3]},{日期:“十月”,数据:[4,5,6]}];
const bb=[{日期:“十月”,数据:[1,2,3]},{日期:“十一月”,数据:[40,50,60]},{日期:“十二月”,数据:[41,51,61]};
设tempArr=aa;
bb.forEach(rec=>{
让findIndex=tempArr.findIndex(obj=>obj.date==rec.date);
如果(findIndex==-1){
tempArr.push(rec);
}否则{
tempArr[findIndex].data=tempArr[findIndex].data.concat(rec.data);
}
});
控制台日志(tempArr)
您可以根据
日期进行分组,并获取新对象作为结果集

var array1=[{date:“sep”,数据:[1,2,3]},{date:“oct”,数据:[4,5,6]},
array2=[{日期:“10月”,数据:[1,2,3]},{日期:“11月”,数据:[40,50,60]},{日期:“12月”,数据:[41,51,61]},
结果=Array.from(
[…阵列1,…阵列2]。减少(
(m,{date,data})=>m.set(date,[…(m.get(date)| |[…),…data]),
新地图
),
([date,data])=>({date,data})
);
控制台日志(结果)
.as console wrapper{max height:100%!important;top:0;}
您可以按
日期进行分组,并将新对象作为结果集

var array1=[{date:“sep”,数据:[1,2,3]},{date:“oct”,数据:[4,5,6]},
array2=[{日期:“10月”,数据:[1,2,3]},{日期:“11月”,数据:[40,50,60]},{日期:“12月”,数据:[41,51,61]},
结果=Array.from(
[…阵列1,…阵列2]。减少(
(m,{date,data})=>m.set(date,[…(m.get(date)| |[…),…data]),
新地图
),
([date,data])=>({date,data})
);
控制台日志(结果)

.as控制台包装{max height:100%!重要;top:0;}
只需循环即可。显示您的代码。只需循环。显示您的代码。