¡Esta es la primera pregunta que me hacen en este sitio en mi viaje como desarrollador!
Tengo una matriz - const dataOne = [17, 21, 23];
Necesito enumerar los valores en esta matriz para que se vea así cuando inicie sesión en la consola:
"17°C en 1 día, 21°C en 2 días, 23°C en 3 días"
El siguiente código registra exactamente lo que quiero, pero sé que esta no es la forma más eficiente de hacerlo. ¿Hay una forma "más limpia" o mejor de hacer esto sin codificar la matriz en la declaración de devolución? Ej: ${arr[i +1]}
const dataOne = [17, 21, 23]; const printForecast = function(arr) { for (let i = 0; i < arr.length; i++) { return `${arr[i]}°C in ${i + 1} day, ${arr[i + 1]}°C in ${i + 2} days, ${arr[i + 2]}°C in ${i + 3} days`; } }; console.log(printForecast(dataOne));Simplemente puede usar el mapa y unirse para lograr el resultado deseado
Esta es la forma más limpia de lograrlo. En este enfoque, no tiene que rastrear dónde debe colocar la coma (
,). Simplementemapsobre la matriz y luegojoincon,simple
const dataOne = [17, 21, 23]; const printForecast = function (arr) { return arr.map((t, i) => `${t}°C in ${i + 1} day${i !== 0 ? "s" : ""}`) .join(", "); }; console.log(printForecast(dataOne));Si desea utilizar reducir, puede hacerlo como:
const dataOne = [17, 21, 23, 25]; const printForecast = function (arr) { return dataOne.reduce((agg, x, index, src) => (agg += `${x}°C in ${index + 1} day${index !== 0 ? "s" : ""}${ index !== src.length - 1 ? ", " : ""}`),""); }; console.log(printForecast(dataOne));En primer lugar, si el código funciona para ti y lo entiendes, es lo suficientemente bueno. Intente optimizar más tarde cuando esté muy familiarizado con los conceptos básicos.
Por el bien de esta pregunta, puede usar .reduce() para resolver el problema. Se utiliza para iterar sobre los valores a agregar y devolver un único resultado calculado.
const dataOne = [17, 21, 23, 25]; const printForecast = function(arr) { let newString = dataOne.reduce((agg, x, index) => { if (index === 0) { agg = agg + x + '°C in ' + (index + 1) + ' day'; } else { agg = agg + ', ' + x + '°C in ' + (index + 1) + ' days'; } return agg; }, ''); return newString } console.log(printForecast(dataOne));