Aquí están las respuestas de mi API:
const attractions = [ {"id": 1,"name": "drive on avenue"}, {"id": 2, "name": "diving"}, {"id": 3,"name": "visiting mangroove"}, ]; const reviews = [ {"id": 1,"score": 1.5}, {"id": 2, "score": 2} , {"id": 3,"score": 5.5}, {"id": 3,"score": 4}, {"id": 2,"score": 3}, {"id": 1,"score": 3.5}, {"id": 3,"score": 5}, {"id": 2,"score": 4} ]Rendimiento esperado:
[{"name": "drive on avenue", "score": 2.5}, {"name": "diving", "score": 3}, {"name": "visiting mangroove", "score": 4.83} ] Intenté usar reduce , pero eso resumiría todos los puntajes en uno. ¿Cómo puedo calcular la puntuación media de cada ID?
Recorra la matriz de atracciones y, para cada una, obtenga el promedio de la matriz de reseñas. Algo como esto:
const attractions = [ {"id": 1,"name": "drive on avenue"}, {"id": 2, "name": "diving"}, {"id": 3,"name": "visiting mangroove"}, ]; const reviews = [ {"id": 1,"score": 1.5}, {"id": 2, "score": 2} , {"id": 3,"score": 5.5}, {"id": 3,"score": 4}, {"id": 2,"score": 3}, {"id": 1,"score": 3.5}, {"id": 3,"score": 5}, {"id": 2,"score": 4} ] var returned = [] attractions.forEach((attraction) => { let arr = reviews.filter(x => x.id == attraction.id).map(x => x.score); let score = arr.reduce((a, b) => a + b, 0)/arr.length; returned.push({ name: attraction.name, score: score}); }) console.log(returned); map y filter son funciones de orden superior descritas aquí:
En resumen, map se usa aquí para extraer valores de un objeto {id: 1, score: 3} => 3 . Y el filter se usa aquí para filtrar la revisión y obtener solo las identificaciones que queremos.