Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

151
Vistas
Necesito restar una clave, de una matriz de objetos, de otra clave de otra matriz de objetos

Tengo las siguientes dos matrices:

 const firstArray = [{startDate: 5, number: 15}, {startDate: 25, number: 10}, {startDate: 26, number: 10}]; const secondArray= [{startDay: 2, endDay:10, number: 15}, {startDay: 20, endDay:30, number: 20}];

si startDate está entre startDay y endDay , tengo que restar number de firstArray y el number de secondArray creando una nueva clave con resultado

Como resultado, tengo que poner una nueva clave en firstArray con el resultado:

 const firstArray = [{startDate: 5, number: 15, result: 0}, {startDate: 25, number: 25, result: -10}, {startDate: 26, number: 25, result: 0}];

si tengo más de una fecha de inicio en el mismo rango (entre el día de inicio y el día de finalización) tengo que agregar al último resultado de ese rango

El código que tengo por ahora:

 firstArray.map(el => ({...el, result: el.number - here's number from the secondArray according to the requirements}))
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

El mapa no funcionará muy bien para recorrer dos matrices y cambiar valores.

Simplemente use un ciclo for simple, verifique sus condiciones entre firstArray[i] y secondArray[i] , luego agregue el valor a firstArray[i].result

 const firstArray = [{startDate: 5, number: 15}, {startDate: 25, number: 20}]; const secondArray= [{startDay: 2, endDay:10, number: 10}, {startDay: 20, endDay:30, number: 20}]; for (let i = 0; i < Math.min(firstArray.length, secondArray.length); i++) if (secondArray[i].startDay < firstArray[i].startDate && firstArray[i].startDate < secondArray[i].endDay) firstArray[i].result = firstArray[i].number - secondArray[i].number; console.log(firstArray);

about 4 years ago · Juan Pablo Isaza Denunciar

0

Cuando usa dos o más arreglos, necesita saber con qué índice está trabajando. Además, para obtener el mejor rendimiento, evite cualquier tipo de función de devolución de llamada, use bucles simples en su lugar:

 const firstArray = [{startDate: 5, number: 15}, {startDate: 25, number: 10}, {startDate: 26, number: 10}]; const secondArray= [{startDay: 2, endDay:10, number: 15}, {startDay: 20, endDay:30, number: 20}]; for(let i = 0, first, second, result = 0; i < firstArray.length; i++) { first = firstArray[i]; second = secondArray[i]; if (second && first.startDate >= second.startDay && first.startDate <= second.endDay) result = first.number - second.number; else result += first.number; first.result = result; } console.log(firstArray);

Usar map() también funcionaría y produciría un código un poco más corto, pero es más lento y muy innecesario:

 const firstArray = [{startDate: 5, number: 15}, {startDate: 25, number: 10}, {startDate: 26, number: 10}]; const secondArray= [{startDay: 2, endDay:10, number: 15}, {startDay: 20, endDay:30, number: 20}]; firstArray.map((first, i) => { const second = secondArray[i]; if (second && first.startDate >= second.startDay && first.startDate <= second.endDay) first.result = first.number - second.number; else first.result = ((firstArray[i-1]||{}).result || 0) + first.number; }); console.log(firstArray);

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda