Así que estoy trabajando en una tarea en la que se supone que hago un seguimiento de "cuántos puntos ha ganado un equipo deportivo en una temporada" escribiendo una función llamada getTotalPoints que acepta una cadena de letras y devuelve el total de puntos ganados. Estas letras serían cualquier serie de "w" (ganancias) "d" (empates) y/o "l" (pérdidas).
La asignación incluye un valor numérico predefinido para cada letra (w = 3, d = 1 y l = 0), una función auxiliar para obtener estos valores getPointsFromResult y la función con un parámetro de cadena pasado, getTotalPoints('wwdl') para probar que la función getTotalPoints que escribí funciona correctamente.
Llegué a convertir la cadena en una matriz y luego traté de iterar en esa matriz. La respuesta correcta debería ser 7, pero obtengo un resultado de 16, porque parece que el ciclo forEach está iterando todo el 4 de x (siendo 4 la longitud de la matriz) Como resultado de 4 conjuntos de 3+1+0 (esencialmente 4x4).
No tengo idea de cómo avanzar desde aquí y estoy completamente atascado.
const RESULT_VALUES = { w: 3, d: 1, l: 0 } /** * Takes a single result string and (one of 'w', 'l', or 'd') * and returns the point value * * @param {string} result * @returns {number} point value */ function getPointsFromResult(result) { return RESULT_VALUES[result]; } // Create getTotalPoints function which accepts a string of results // including wins, draws, and losses ie 'wwdlw' // Returns total number of points won let getTotalPoints = function(pointsString) { let pointsArray = Array.from(pointsString); console.log(pointsArray); let sum = 0 pointsArray.forEach(function(result) { console.log(result) let wins = getPointsFromResult('w'); let draws = getPointsFromResult('d'); let losses = getPointsFromResult('l'); console.log(wins); console.log(draws); console.log(losses); sum += wins; sum += draws; sum += losses; }) return sum; }; // Check getTotalPoints console.log(getTotalPoints('wwdl')); // should equal 7Qué tal algo como esto:
const RESULT_VALUES = { w: 3, d: 1, l: 0 } function getPointsFromResult(result) { return RESULT_VALUES[result]; } let getTotalPoints = function(pointsString) { let pointsArray = Array.from(pointsString); // Put value of each letter into a results array: let results = pointsArray.map(result => getPointsFromResult(result)); // Sum all values in above results array to get total. let sum = results.reduce((a, b) => a + b, 0); return sum; }; console.log(getTotalPoints('wwdl')); // should equal 7split() cadena "wwdl" en una matriz:
'wwdl'.split('') //['w', 'w', 'd', 'l']Luego obtenga cada clave del objeto ('w', 'd', 'l') y obtenga el valor (3, 1, 0).
object['w'] // first iteration 3 object['w'] // second iteration 3 object['d'] // third iterayion 1 object['l'] // fourth iteration 0 .reduce() puede agregar los valores y devolver una suma:
sum + current value En el siguiente ejemplo log(data) es solo una función de ayuda para iniciar sesión en la consola más fácilmente.
const log = data => console.log(JSON.stringify(data)); const record = `wwdl`; const totalScore = record => { const scoring = { w: 3, d: 1, l: 0 }; let recArr = record.split(''); log('String as an Array:'); log(recArr); return recArr.reduce((sum, cur) => { log('Current Key: ' + cur + ': return: ' + scoring[cur]); return sum + scoring[cur]; }, 0); }; log('Total Score: ' + totalScore(record)); .as-console-row::after { width: 0; font-size: 0; } .as-console-row-code { width: 100%; word-break: break-word; }