Ćwiczymy tagged template literals. Proste ćwiczenie pokazujące jak potężne jest to narzędzie. Do dzieła!
Ok, zobaczmy co chcemy osiągnąć:
let languages = ["JS", "PHP", "C#"];
//(...)
let res = wrapMany`<li>${languages}</li>`;
console.log(res);
//Array(3) [ "<li>JS</li>", "<li>PHP</li>", "<li>C#</li>" ]
Czyli tak:
- Funkcja ma 2 stringi i 1 expression
- Expression może i 1, ale zawiera wiele replacementów, bo jest tablicą (ciężko na początku może być to pojąć)
- String[0] to tag otwierający, string[1] to tag zamykający
- Expr[0] to pierwszy content, który trzeba opleść tagami, expr[1] to drugi content, który trzeba opleść tagami…
- Funkcja ma przyjąć string z jednym expression (będącym tablicą)
Ok, tak to wygląda:
let languages = ["JS", "PHP", "C#"];
function wrapMany(tags, elements){
const newHTML = elements.map(function(content){
return `${tags[0]}${content}${tags[1]}`;
});
return newHTML;
}
let res = wrapMany`<li>${languages}</li>`;
console.log(res);
//Array(3) [ "<li>JS</li>", "<li>PHP</li>", "<li>C#</li>" ]
Nie jest to szczególnie trudne, jeżeli chodzi o sam kod, ale zrozumienie tego wymaga czasu i chęci. Zwłaszcza, że na początku wszystko będzie nam się mylić – jeden expression zawierający tablicę z tablicą zawierającą wiele expressions (typu prostego) i tak dalej.