por favor, quiero que esta función recorra cualquier matriz y genere una nueva base de matriz en la lógica escrita, pero solo obtengo la matriz inicial cuando llamo a la función con la matriz como argumento, necesito ayuda. A continuación se muestra el código
const scores = [35, 68, 70, 38]; const scores1 = [89, 42, 33]; function gradingStudents(...grades) { const newScores = grades.map(function (grade) { if (grade + 2 >= 40 && grade % 5 >= 3) { return grade % 5 == 3 ? grade + 2 : grade + 1; } else if (grade + 2 >= 40 && grade % 5 < 3) { return grade; } else { return grade; } }); return newScores; } console.log(gradingStudents(scores1));La sintaxis Rest Paramanter (...) se usa cuando se maneja con un número dinámico de argumentos. Aquí está pasando solo un argumento a la función. Elimine el ... del parámetro de función y su función funcionará como se esperaba.
const scores = [35, 68, 70, 38]; const scores1 = [89, 42, 33]; function gradingStudents(grades) { const newScores = grades.map(function (grade) { if (grade + 2 >= 40 && grade % 5 >= 3) { return grade % 5 == 3 ? grade + 2 : grade + 1; } else if (grade + 2 >= 40 && grade % 5 < 3) { return grade; } else { return grade; } }); return newScores; } console.log(gradingStudents(scores1)); Si está manejando la función usando la sintaxis Rest Paramanter como lo hizo ahora, el parámetro en la función escrito como ...grades combinará todos los parámetros en la función en una sola matriz. Lo que significa que sus scores1 estarán allí dentro de la matriz de grades como en la consola a continuación.
const scores1 = [89, 42, 33]; function gradingStudents(...grades) { // grades will be an array with scores1 as a sigle element in 0th index console.log(grades) } gradingStudents(scores1); Recorriendo las grades en la condición anterior, cada nodo será una matriz que no satisfará ninguna de las declaraciones if, por lo tanto, devolverá la matriz en sí. Es por eso que está obteniendo la salida como una matriz con el padre como nodo único.
ya que está devolviendo el grado si no cumplió con la primera condición. El operador resto no es necesario. Puedes escribirlo de la siguiente manera:
function gradingStudents(grades) { const newScores = grades.map(function (grade) { if (grade + 2 >= 40 && grade % 5 >= 3) { return grade % 5 == 3 ? grade + 2 : grade + 1; }else { return grade; } }); return newScores; }Puedes usar forEach también
const scores = [35, 68, 70, 38]; const scores1 = [89, 42, 33]; function gradingStudents(grades) { let newScore = []; grades.forEach(function (grade) { if (grade + 2 >= 40 && grade % 5 >= 3) { grade = grade % 5 == 3 ? grade + 2 : grade + 1; newScore.push(grade); } else if (grade + 2 >= 40 && grade % 5 < 3) { newScore.push(grade); } else { newScore.push(grade); } }); return newScore; } console.log(gradingStudents(scores)); console.log(gradingStudents(scores1));