`list.innerHTML = todos.map(todo => `<li>${todo.title}</li>`).join('')`
.join('')がなぜ必要なのかが分かりません
map()
メソッドは新しい配列を生成します。そのため、todos.map(todo =>
${todo.title})
によって、各 todo
アイテムのタイトルを含む <li>
タグの配列が生成されます。
配列をそのまま innerHTML
に設定すると、各アイテムの間にコンマが自動的に挿入されます。これは、JavaScriptで配列を文字列に変換するときのデフォルトの振る舞いです。
例:
const arr = ['a', 'b', 'c'];
console.log(arr.toString()); // "a,b,c"
このような不要なコンマを避けるために、join('')
を使用して配列の要素を結合します。join('')
は配列の要素を、指定された区切り文字(この場合は空文字列)で結合して1つの文字列にします。
したがって、 .join('')
を使用すると、結果として得られる文字列はコンマを含まず、<li>
タグだけが連続する形になります。この文字列は innerHTML
に適切に設定され、期待される表示結果となります。
配列が以下の場合はどうなりますか?
```
{
"todos": [
{ "title": "会議用資料を作る" },
{ "title": "会合に出席する" }
]
}
```
指定された配列を使用すると、以下の手順で処理されます。
todos
配列の各 todo
オブジェクトに対して、map()
メソッドを使用してHTMLの <li>
要素の配列を生成します。join('')
を使用して、生成された配列の各 <li>
要素を1つの文字列に結合します。具体的なコードを使用すると以下のようになります。
` const data = {
"todos": [
{ "title": "会議用資料を作る" },
{ "title": "会合に出席する" }
]
};
const list = document.getElementById('list'); // listというidを持つ要素を取得
list.innerHTML = data.todos.map(todo => `<li>${todo.title}</li>`).join('');
上記のコードを実行すると、結果的に以下のHTMLが list
というidを持つ要素にセットされます。
<li>会議用資料を作る</li><li>会合に出席する</li>
.join('')` がない場合、以下のようにHTMLがセットされるので、各 `<li>` の間に余分なコンマが表示されてしまいます。
```html
<li>会議用資料を作る</li>,<li>会合に出席する</li>
この理由から、 .join('')
は <li>
タグ間の不要なコンマを除去するために必要です。