Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.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 如何将索引为0的重复数组合并到一个数组中_Javascript_Arrays_Duplicates_Array Merge - Fatal编程技术网

Javascript 如何将索引为0的重复数组合并到一个数组中

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

我有一个数组,其日期在索引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,
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);
}
});

控制台日志(结果)“2016-08-26T00:00:00Z”
。问题是日期索引是javascript日期。它不起作用。您可以检查
toString
方法:
a[0]。toString()===b[0]。toString()
返回一个可比较的字符串。速度太慢,尤其是在处理超过5000个数组数据时。很好。我看到你修改了解决方案。谢谢唯一的问题是我希望日期值为date。我在图形上绘制数据,它不需要字符串和值。