Soy nuevo en esta comunidad y recién comencé a programar. No pude encontrar nada sobre este tema. ¿Alguien puede resolver esto? Necesito filtrar los nombres de cada uno de los puntos en la matriz por encima de 75. He intentado esto y no puedo iterar sobre una matriz.
const candidatesList = [{'name':'Blake Hodges', 'points':[76,98,88,84]},{'name':'James Anderson', 'points':[0,98,12,13]}] const arrayOfSelecetedCandidates=[] for(let object of candidatesList){ if (candidatesList.every(candidatesList.points>75)){ arrayOfSelecetedCandidates.push(candidatesList.name) } } console.log(arrayOfSelecetedCandidates);¿Quizás quieres esto?
const candidatesList = [{'name':'Blake Hodges', 'points':[76,98,88,84]},{'name':'James Anderson', 'points':[0,98,12,13]}] const arrayOfSelecetedCandidates=[] for(let object of candidatesList){ if (object.points.every(i=>i>75)) arrayOfSelecetedCandidates.push(object.name) } console.log(arrayOfSelecetedCandidates);Pero como @Dai señaló, el filtro siempre es mejor si desea probar una matriz y devolver el elemento que pasa la prueba:
const candidatesList = [{'name':'Blake Hodges', 'points':[76,98,88,84]},{'name':'James Anderson', 'points':[0,98,12,13]}] const arrayOfSelecetedCandidates=candidatesList.filter(i=>i.points.every(y=>y>75)) console.log(arrayOfSelecetedCandidates)Puede lograr esto usando el método Array.filter() junto con Array.every() para probar si todos los elementos en la matriz pasan la prueba implementada por la función provista. Devuelve un valor booleano.
Demostración de trabajo:
const candidatesList = [{ 'name': 'Blake Hodges', 'points': [76, 98, 88, 84] }, { 'name': 'James Anderson', 'points': [0, 98, 12, 13] }]; let res = candidatesList.filter((obj) => { return obj.points.every((item) => item > 75) }); console.log(res);"Necesito filtrar los nombres de cada uno de los puntos de la matriz por encima de 75"
Mirando el contenido de OP, creo que es incorrecto. Tendría más sentido si el resultado deseado fueran solo los objetos (también conocidos como candidatos) que tienen un promedio de puntos igual o superior a 75, no un total de 75 (aunque no se explica muy bien). Así que el plan de ataque sería:
Obtenga cada uno de los candidatos con un bucle for...of :
for (const candidate of candidates) {... Obtenga cada uno de los puntos del candidato ( candidate.points ) y obtenga sus sumas usando .reduce() (nota: el retorno va a una nueva propiedad llamada .total ). Luego tome ese total y divídalo por el número de calificaciones que se encuentran en la matriz de puntos (es candidate.points.length = 4):
candidate.total = candidate.points.reduce((sum, cur) => sum + cur, 0); candidate.gpa = Math.floor(candidate.total / candidate.points.length); Una vez que se establece candidate.gpa , .filter() determinará si es igual o mayor que 75.
return candidates.filter(candidate => candidate.gpa >= 75); const candidates = [{ 'name': 'Blake Hodges', 'points': [76, 98, 88, 84] }, { 'name': 'James Anderson', 'points': [0, 98, 12, 13] }, { 'name': 'Zer0 0ne', 'points': [100, 88, 91, 84] }, { 'name': 'Ronald McDonald', 'points': [72, 51, 8, 89] }]; const selected = candidates => { for (const candidate of candidates) { candidate.total = candidate.points.reduce((sum, cur) => sum + cur, 0); candidate.gpa = Math.floor(candidate.total / candidate.points.length); } return candidates.filter(candidate => candidate.gpa >= 75); }; console.log(selected(candidates));