`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> タグ間の不要なコンマを除去するために必要です。