Tengo una situación en la que intento unirme a la matriz de cadenas solo si tiene un valor. Lo hice usando la variable let, pero me pregunto si puedo hacer esto usando el mapa. Soy muy consciente de la posición, así que lo usé de esta manera.
const [hours, minutes, seconds] =["", "10", ""] let time = ""; if (hours) { time += `${hours}h `; } if (minutes) { time += `${minutes}m `; } if (seconds) { time += `${seconds}s`; } console.log(time)¿Podré hacer esto usando el mapa, filtrar y unirme?
Si vuelve a colocar las horas, los minutos y los segundos en una matriz, puede crear otra matriz para los sufijos, agregar los sufijos asignando los valores y luego filtrar las subcadenas resultantes que tienen 1 carácter o menos (lo que indicaría que hay no era un valor correspondiente).
const suffixes = ['h', 'm', 's']; const [hours, minutes, seconds] = ["", "10", ""]; // combine this with the next line if you can const hms = [hours, minutes, seconds]; const time = hms .map((value, i) => value + suffixes[i]) .filter(substr => substr.length > 1) .join(' '); console.log(time)Aquí hay un pequeño fragmento agradable
const suffixs = "hms"; // String arrays of single characters can be shortened to this! const values = ["","10",""]; var string = values .map((x,i) => x ? x + suffixs[i] : x) .filter(x => x) .join(" "); console.log(string); // Or if you want to have 0 in place of empty values var string2 = values .map((x,i) => (x || "0") + suffixs[i]) .join(" "); console.log(string2);Personalmente, crearía una lista de objetos que representen el tiempo.
Prefiero esto a usar dos matrices, ya que puede salvar algunos errores (como cambiar el orden de los datos en una lista pero no en la otra):
const [hours, minutes, seconds] = ["20", "10", ""]; const time = [ { amount: hours, sign: "h" }, { amount: minutes, sign: "m" }, { amount: seconds, sign: "s" }, ]; const str = time .filter((val) => val.amount) .map((val) => val.amount + val.sign) .join(" "); console.log(str);