Aquí está la pregunta:
"Escriba una función que agregueTodasLasCosasRaras que sume la suma de todos los números impares en la matriz2 a cada elemento menor de 10 en la matriz1. De manera similar, agregarTodasLasCosasRaras también debe sumar la suma de todos los números pares en la matriz2 a los elementos mayores de 10 en la matriz1.
BONIFICACIÓN: si algún elemento de matriz2 es mayor que 20, agregue 1 a cada elemento de matriz1".
Conseguí que la primera parte funcionara. Parece que no puedo averiguar cómo hacer que la segunda parte funcione. Esto es lo que he probado:
function addingAllTheWeirdStuff(array1, array2){ // ADD CODE HERE let sumOdd = 0; let sumEven = 0; for (let i = 0; i < array2.length; i++) { if (array2[i] % 2 !== 0) { sumOdd += array2[i]; } else { sumEven += array2[i]; } } for (let i =0; i < array1.length; i++) { if (array1[i] < 10) { array1[i] += sumOdd; } else if (array1[i] > 10) { array1[i] += sumEven; } for (let i =0; i < array2.length; i++) { if (array2[i] > 20) { for (let i =0; i < array1.length; i++) { array1[i] += 1; return array1; } return array1; } } return array1; }¿Alguna sugerencia sobre cómo hacer que la última parte de la pregunta funcione?
Gracias por adelantado.
En primer lugar, eliminé algunas de las llaves innecesarias y las equilibré para que sea más legible (al menos para mí)
Luego eliminé su último bucle anidado porque era innecesario e ineficiente. Mientras recorre array2 para obtener sumOdd & sumEven , puede verificar al mismo tiempo si algún elemento es >20 y almacenarlo en una variable (mayor que greaterThan20 ). Luego, al agregar las sumas, puede verificar esa misma var para agregar 1
function addingAllTheWeirdStuff(array1, array2) { // ADD CODE HERE let sumOdd = 0; let sumEven = 0; let greaterThan20 = false; // false by default for (let i = 0; i < array2.length; i++) { if (array2[i] % 2 !== 0) sumOdd += array2[i]; else sumEven += array2[i]; if (array2[i] > 20)// check if any element > 20 greaterThan20 = true; } for (let i = 0; i < array1.length; i++) { if (array1[i] < 10) array1[i] += sumOdd; else if (array1[i] > 10) array1[i] += sumEven; if (greaterThan20)// add the +1 if greater than 20 array1[i] += 1; } return array1; }En su código, como alguien señaló, tenía una declaración de devolución en su ciclo interno que estaba saliendo del ciclo.
También agregué aquí una solución alternativa, solo por diversidad. Primero calcule sumas pares e impares usando filtro y reducción. También verifico si algún elemento tiene más de 20. Basado en el valor verdadero/falso de arr2.some, mapeo sobre el arr1
const arr1 = [4, 5, 6, 7, 8, 9, 10, 11, 12] const arr2 = [6, 7, 8, 9, 10, 11, 12, 13, 14, 21] function addingAllTheWeirdStuff(arr1, arr2) { let oddSum = arr2.filter(el => el % 2 != 0).reduce((a, n) => a + n) let evenSum = arr2.filter(el => el % 2 == 0).reduce((a, n) => a + n) const over20 = arr2.some(el => el > 20) if (over20) { return arr1.map(el => el > 10 ? el += ++evenSum : el += ++oddSum) } else { return arr1.map(el => el > 10 ? el += evenSum : el += oddSum) } } console.log(addingAllTheWeirdStuff(arr1, arr2))estaba usando return en el lugar equivocado, lo que hace que la función se detenga después del primer number>20 en lugar de continuar para todos los números
también puedes fusionar el primer y el último ciclo, solo lo dejé así para que sea más claro
function addingAllTheWeirdStuff(array1, array2) { // ADD CODE HERE let sumOdd = 0; let sumEven = 0; for (let i = 0; i < array2.length; i++) { if (array2[i] % 2 !== 0) { sumOdd += array2[i]; } else { sumEven += array2[i]; } } for (let i = 0; i < array1.length; i++) { if (array1[i] < 10) { array1[i] += sumOdd; } else if (array1[i] > 10) { array1[i] += sumEven; } } // moved this outside of the above loop for (let i = 0; i < array2.length; i++) { if (array2[i] > 20) { for (let i = 0; i < array1.length; i++) { array1[i] += 1; // return array1; remove this line } } } return array1; // now return }