Javascript 如何将索引为0的重复数组合并到一个数组中
我有一个数组,其日期在索引0处。我很想检查love来循环数组,任何与另一个匹配的日期,都应该在处合并这些值 这就是阵列的外观,也是我尝试过的Javascript 如何将索引为0的重复数组合并到一个数组中,javascript,arrays,duplicates,array-merge,Javascript,Arrays,Duplicates,Array Merge,我有一个数组,其日期在索引0处。我很想检查love来循环数组,任何与另一个匹配的日期,都应该在处合并这些值 这就是阵列的外观,也是我尝试过的 var数组=[ [ 日期2019-06-11T10:00:00.000Z, 0, 0, 0, 23 ], [ 日期019-06-11T10:00:00.000Z, 0, 0, 2. 0 ], [ 日期2019-16-11T12:00:00.000Z, 0, 56, 0, 0 ], [ 日期2019-16-11T12:00:00.000Z, 3. 0, 0
var数组=[
[
日期2019-06-11T10:00:00.000Z,
0,
0,
0,
23
],
[
日期019-06-11T10:00:00.000Z,
0,
0,
2.
0
],
[
日期2019-16-11T12:00:00.000Z,
0,
56,
0,
0
],
[
日期2019-16-11T12:00:00.000Z,
3.
0,
0,
0
]
]
var result=array.filter(函数(v){
是否返回此[v[0]]?
!Object.assign(此[v[0]],v):
(此[v[0]]=v)
}, []);
控制台日志(结果)代码>一种快速接近物体的方法
var数组=[[新日期('2019-06-11T10:00:00.000Z'),0,0,0,23],[新日期('2019-06-11T10:00:00.000Z'),0,0,2,0],[新日期('2019-06-16T12:00:00.000Z'),0,56,0,0],[新日期('2019-06-16T12:00.000Z'),3,0,0],
哈希={},
i、 j,
结果,,
项目,,
钥匙
对于(i=0;i
.as console wrapper{max height:100%!important;top:0;}
您可以使用findIndex检查累加器是否已具有新数组的0索引,如果存在,则合并数组:
const arr=[[2019-06-11T10:00:00.000Z',0,0,0,23],'2019-06-11T10:00:00.000Z',0,0,2,0],'2019-16-11T12:00:00.000Z',0,56,0,0],'2019-16-11T12:00.000Z',3,0,0,0]]
排序常数=arr.reduce((acc,a)=>{
const index=acc.findIndex(b=>a[0]==b[0])
索引>-1?acc[index]=acc[index].map((b,i)=>i?b+a[i]:b):acc.push(a)
返回acc
}, [])
console.log(sorted)
在每次合并操作中都需要考虑很多条件,但是您可以使用、和方法的组合,并执行如下操作:
let result = [];
array.forEach((a, i) => {
if (!result.some(x => x[0] == a[0])) {
let found = array.filter((x, j) => {
return i != j && x[0] == a[0];
});
if (found.length > 0) {
a = a.map((e, ind) => {
if (ind > 0)
found.forEach(f => {
e += f[ind];
});
return e;
});
}
result.push(a);
}
});
演示:
var数组=[
[
“2019-06-11T10:00:00.000Z”,
0,
0,
0,
23
],
[
“2019-06-11T10:00:00.000Z”,
0,
0,
2.
0
],
[
“2019-16-11T12:00:00.000Z”,
0,
56,
0,
0
],
[
“2019-16-11T12:00:00.000Z”,
3.
0,
0,
0
]
];
让结果=[];
array.forEach((a,i)=>{
如果(!result.some(x=>x[0]==a[0])){
let found=array.filter((x,j)=>{
返回i!=j&&x[0]==a[0];
});
如果(找到的长度>0){
a=a.map((e,ind)=>{
如果(ind>0)
found.forEach(f=>{
e+=f[ind];
});
返回e;
});
}
结果:推(a);
}
});
控制台日志(结果)不要粗鲁,但我不确定这个解决方案是否可行。它显然有效,但A不可读,这导致了B,问题作者不会通过复制粘贴答案来提高他的技能。我想我们会再次遇到同样的问题。请不要误会我的意思,我看到你做了很多,所以质量很好。这是我脑海中突然出现的东西。如果日期是一个字符串值,这似乎是可行的“2016-08-26T00:00:00Z”
。问题是日期索引是javascript日期。它不起作用。您可以检查toString
方法:a[0]。toString()===b[0]。toString()
返回一个可比较的字符串。速度太慢,尤其是在处理超过5000个数组数据时。很好。我看到你修改了解决方案。谢谢唯一的问题是我希望日期值为date。我在图形上绘制数据,它不需要字符串和值。