Javascript 如何从二维数组中的奇数位置减去偶数位置,并将结果映射到新数组?

Javascript 如何从二维数组中的奇数位置减去偶数位置,并将结果映射到新数组?,javascript,arrays,multidimensional-array,Javascript,Arrays,Multidimensional Array,我有一个多维数组,它的第一个位置是Date()对象。我以前通过每天分组来减少安排。我试图通过减去成对的奇数位置(“SALIDA”)的结果(“ENTRADA”)来减少每个每日子数组 这些是数据: const arrayHoras = [ [ "Thu Jan 02 2020 08:25:38 GMT+0100 (CET)", "ENTRADA", "NOMBRE APELLIDO APELLIDO" ], [ "Thu Jan 02 2020 13:30

我有一个多维数组,它的第一个位置是Date()对象。我以前通过每天分组来减少安排。我试图通过减去成对的奇数位置(“SALIDA”)的结果(“ENTRADA”)来减少每个每日子数组

这些是数据:

const arrayHoras = [
  [
    "Thu Jan 02 2020 08:25:38 GMT+0100 (CET)",
    "ENTRADA",
    "NOMBRE APELLIDO APELLIDO"
  ],
  [
    "Thu Jan 02 2020 13:30:43 GMT+0100 (CET)",
    "SALIDA",
    "NOMBRE APELLIDO APELLIDO"
  ],
  [
    "Thu Jan 02 2020 15:18:06 GMT+0100 (CET)",
    "ENTRADA",
    "NOMBRE APELLIDO APELLIDO"
  ],
  [
    "Thu Jan 02 2020 18:12:22 GMT+0100 (CET)",
    "SALIDA",
    "NOMBRE APELLIDO APELLIDO"
  ],
  [
    "Fri Jan 03 2020 08:35:38 GMT+0100 (CET)",
    "ENTRADA",
    "NOMBRE APELLIDO APELLIDO"
  ],
  [
    "Fri Jan 03 2020 10:15:23 GMT+0100 (CET)",
    "SALIDA",
    "NOMBRE APELLIDO APELLIDO"
  ],
  [
    "Fri Jan 03 2020 10:59:16 GMT+0100 (CET)",
    "ENTRADA",
    "NOMBRE APELLIDO APELLIDO"
  ],
  [
    "Fri Jan 03 2020 12:25:01 GMT+0100 (CET)",
    "SALIDA",
    "NOMBRE APELLIDO APELLIDO"
  ],
  [
    "Fri Jan 03 2020 12:31:33 GMT+0100 (CET)",
    "ENTRADA",
    "NOMBRE APELLIDO APELLIDO"
  ],
  [
    "Fri Jan 03 2020 13:20:43 GMT+0100 (CET)",
    "SALIDA",
    "NOMBRE APELLIDO APELLIDO"
  ],
  [
    "Fri Jan 03 2020 15:28:06 GMT+0100 (CET)",
    "ENTRADA",
    "NOMBRE APELLIDO APELLIDO"
  ],
  [
    "Fri Jan 03 2020 18:32:10 GMT+0100 (CET)",
    "SALIDA",
    "NOMBRE APELLIDO APELLIDO"
  ],
  [
    "Tue Jan 07 2020 08:31:46 GMT+0100 (CET)",
    "ENTRADA",
    "NOMBRE APELLIDO APELLIDO"
  ],
  [
    "Tue Jan 07 2020 13:22:51 GMT+0100 (CET)",
    "SALIDA",
    "NOMBRE APELLIDO APELLIDO"
  ],
  [
    "Tue Jan 07 2020 15:30:00 GMT+0100 (CET)",
    "ENTRADA",
    "NOMBRE APELLIDO APELLIDO"
  ],
  [
    "Tue Jan 07 2020 17:22:29 GMT+0100 (CET)",
    "SALIDA",
    "NOMBRE APELLIDO APELLIDO"
  ],
  [
    "Tue Jan 07 2020 17:31:59 GMT+0100 (CET)",
    "ENTRADA",
    "NOMBRE APELLIDO APELLIDO"
  ],
  [
    "Tue Jan 07 2020 18:32:30 GMT+0100 (CET)",
    "SALIDA",
    "NOMBRE APELLIDO APELLIDO"
  ]
];
第一步:我们按照每个元素的第一个位置按天对2D排列进行分组

const gruposDias = arrayHoras.reduce((acumulador, valorActual) => {
  const dia = new Date(valorActual[0]).getDate();
  if (!acumulador[dia]) {
    acumulador[dia] = [];
  }
  acumulador[dia].push(valorActual);
  return acumulador;
}, []);

const agrupadosPorDia = Object.keys(gruposDias).map(porDia => {
  return gruposDias[porDia];
});
第二步:我尝试减少按天分组的安排,结果是减去奇数位置(“SALIDA”)和偶数位置(“ENTRADA”)日期之间经过的秒数:


作为单次传递,您可以假设两个连续的贺拉斯进行呼叫

然后将每个调用映射为
,并按日期对调用进行迭代分组(就像您所做的那样)

由于您对通话不感兴趣,而只对通话所花的时间感兴趣(即
diff
),因此可以按日期对diff进行分组

const arrayHoras=[“2020年1月2日星期四08:25:38 GMT+0100(CET)”,“ENTRADA”,“NOMBRE-APELLIDO-APELLIDO”],[“2020年1月2日星期四13:30:43 GMT+0100(CET)”,“SALIDA”,“NOMBRE-APELLIDO-APELLIDO-APELLIDO”],[2020年1月2日星期四15:18:06 GMT+0100(CET)”,“ENTRADA”,“NOMBRE-APELLIDO-APELLIDO-APELLIDO-APELLIDO”],[2020年1月18:12:22 GMT+0100(CET)”,“SALIDA”,“NOMBRE-APELLIDO”[“2020年1月3日星期五08:35:38 GMT+0100(CET)”,“ENTRADA”,“NOMBRE-APELLIDO-APELLIDO”],[“2020年1月3日星期五10:15:23 GMT+0100(CET)”,“SALIDA”,“NOMBRE-APELLIDO-APELLIDO”],[“2020年1月3日星期五10:59:16 GMT+0100(CET)”,“ENTRADA”,“NOMBRE-APELLIDO-APELLIDO-APELLIDO”],[“Fri-Jan-2020年12:25:01 GMT+0100(CET)”,“SALIDA”,“NOMBRE-APELLIDO-APELLIDO-APELLIDO-APELLIDO-Ap2020年1月3日星期五12:31:33 GMT+0100(CET)”,“ENTRADA”,“NOMBRE-APELLIDO-APELLIDO”],[“2020年1月3日星期五13:20:43 GMT+0100(CET)”,“SALIDA”,“NOMBRE-APELLIDO-APELLIDO”],[“2020年1月3日星期五15:28:06 GMT+0100(CET)”,“ENTRADA”,“NOMBRE-APELLIDO-APELLIDO-APELLIDO”],[“2020年1月3日18:32:10 GMT+0100(CET)”,“SALIDA”,“NOMBRE-APELLIDO-APELLIDO-APELLIDO-APELLIDO-Apellid2020年1月7日星期二08:31:46 GMT+0100(CET)”,“ENTRADA”,“NOMBRE-APELLIDO-APELLIDO”],[“2020年1月7日星期二13:22:51 GMT+0100(CET)”,“SALIDA”,“NOMBRE-APELLIDO-APELLIDO”],[2020年1月7日星期二17:22:29 GMT+0100(CET)”,“SALIDA”,“NOMBRE-APELLIDO-APELLIDO-APELLIDO-APELLIDO”,[”2020年1月7日星期二17:31:59 GMT+0100(CET)”,“ENTRADA”,“NOMBRE-APELLIDO-APELLIDO”],[“2020年1月7日星期二18:32:30 GMT+0100(CET)”,“SALIDA”,“NOMBRE-APELLIDO-APELLIDO”]
//错误的可能性很大,使用瞬间或其他方式
常数makeDelta=(a,b)=>{
常数d=新日期(b-a)
返回[d.getUTCHours(),d.getUTCMinutes(),d.getUTCSeconds()]
.map(x=>(x+“”).padStart(2,'0'))
.join(“:”)
}
const res=arrayHoras.reduce({dateToCalls,call},h)=>{
呼叫推送(h)
if(call.length==2){
常量[a,b]=call.map(x=>newdate(x[0]))
const date=a.getDate()
const v=dateToCalls.get(date)| |[]
v、 推送(makeDelta(a,b))
dateToCalls.set(日期,v)
调用=[]
}
返回{dateToCalls,call}
},{dateToCalls:new Map(),调用:[]}.dateToCalls.values()
//res是一个迭代器,获取一个数组
const out=[…res]

console.log(out)
你能添加预期的结果吗?@grodzi我已经添加了它,很抱歉忘记了它工作得非常完美,这正是我一直在寻找的东西。我通过你的答案学习了很多现代javascript。非常感谢你
const entradas = [];
const salidas = [];
for (let i = 0; i < agrupadosPorDia.length; i += 1) {
  const agrupadosPorDiaI = agrupadosPorDia[i];
  for (let j = 0; j < agrupadosPorDiaI.length; j += 1) {
    if (j % 2) {
      const salidaTime = new Date(agrupadosPorDia[i][j][0]).getTime();
      salidas.push(salidaTime);
      rowSalida.push((ultRowConDatoSimulado += 2));
    } else {
      const entradaTime = new Date(agrupadosPorDia[i][j][0]).getTime();
      entradas.push(entradaTime);
    }
  }
}
console.log("entradas: ", entradas);
console.log("salidas: ", salidas);
agrupadosPorDia: [
  [ 
    [ "05:05:05" ],
    [ "02:54:16" ]
  ],
  [
    [ "02:54:16" ],
    [ "01:39:45" ],
    [ "01:25:45" ],
    [ "00:49:10" ],
    [ "03:04:04" ]
  ],
  ​​[
    [ "04:51:05" ],
    [ "01:52:29" ],
    [ "01:00:31" ],
  ]
];