DATA-WORLD-BLOG

list.innerHTML = todos.map(todo => `<li>${todo.title}</li>`).join('')

👤horomi
❓ Prompt

`list.innerHTML = todos.map(todo => `<li>${todo.title}</li>`).join('')`

.join('')がなぜ必要なのかが分かりません

💬 Answer

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 に適切に設定され、期待される表示結果となります。

❓ Prompt

配列が以下の場合はどうなりますか?
```
{
"todos": [
{ "title": "会議用資料を作る" },
{ "title": "会合に出席する" }
]
}

```

💬 Answer

指定された配列を使用すると、以下の手順で処理されます。

  1. todos 配列の各 todo オブジェクトに対して、map() メソッドを使用してHTMLの <li> 要素の配列を生成します。
  2. 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> タグ間の不要なコンマを除去するために必要です。