Javascript 如何从二维数组中的奇数位置减去偶数位置,并将结果映射到新数组?
我有一个多维数组,它的第一个位置是Date()对象。我以前通过每天分组来减少安排。我试图通过减去成对的奇数位置(“SALIDA”)的结果(“ENTRADA”)来减少每个每日子数组 这些是数据: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
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" ],
]
];