/* * 文字列タイプ要素の結合
 */

const fruits = ["りんご", "バナナ", "いちご"];

console.log(fruits.join());
// "りんご,バナナ,いちご"

console.log(fruits.join(""));
// "りんごバナナいちご"

console.log(fruits.join(" "));
// "りんご バナナ いちご"

console.log(fruits.join(", "));
// "りんご, バナナ, いちご"

console.log(fruits.join("-"));
// "りんご-バナナ-いちご"

console.log(fruits.join("+"));
// "りんご+バナナ+いちご"


/* * 数値タイプ要素の結合
 */

const numbers = [1, 2, 3];

console.log(numbers.join());
// "1,2,3"

console.log(numbers.join(""));
// "123"

console.log(numbers.join("-"));
// "1-2-3"


/* * Booleanタイプ要素の結合
 */

const bool = [true, false];

console.log(bool.join());
// "true,false"

console.log(bool.join(""));
// "truefalse"

console.log(bool.join("-"));
// "true-false"


/* * オブジェクトタイプ要素の結合
 */

const fruitsObject = ["りんご", "バナナ", {name: "いちご", color: "赤"}];

console.log(fruitsObject.join());
// "りんご,バナナ,[object Object]"

console.log(fruitsObject.join(""));
// "りんごバナナ[object Object]"

console.log(fruitsObject.join("-"));
// "りんご-バナナ-[object Object]"


/* * 配列要素の結合
 */

const matrix = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
];

console.log(matrix.join());
// "1,2,3,4,5,6,7,8,9"

console.log(matrix.join(""));
// "1,2,34,5,67,8,9"

console.log(matrix.join("-"));
// "1,2,3-4,5,6-7,8,9"


/* * 疎な配列(Sparse Array)
 */

const sparseArr = [1, , 3, undefined];

console.log(sparseArr.join());
// "1,,3,"

console.log(sparseArr.join(""));
// "13"

console.log(sparseArr.join("-"));
// "1--3-"
arr.join()
arr.join(separator)
const emptyArr = [];

console.log(emptyArr.join(",")); // "" => 空の文字列を返す
const arr = [undefined, 1, null];

console.log(arr.join(",")); // ",1,"
const arr = ["うどん"];

console.log(arr.join(", ")); // "うどん"
const numbers = [1, 2, 3, 4, 5];
const reversedString = numbers.reverse().join("");

console.log(reversedString); // "54321"
const vegetables = ["にんじん", "ブロッコリー", "じゃがいも"];
const htmlList = "<ul><li>" + vegetables.join("</li><li>") + "</li></ul>";

console.log(htmlList);
// "<ul><li>にんじん</li><li>ブロッコリー</li><li>じゃがいも</li></ul>"
// オブジェクトが格納された配列
const people = [
    {name: "結衣", age: 25},
    {name: "翔太", age: 30},
    {name: "美咲", age: 28}
];

// 配列のオブジェクトの名前と年齢を結合して文字列にする
const personStrings = people.map(function(person) {
    return "<li>" + person.name + "さんは " + person.age + "歳です。</li>";
});

// 配列の文字列を <ul> タグで囲み、空の文字列で結合して全体の文字列を作成
const resultString = "<ul>" + personStrings.join("") + "</ul>";

console.log(resultString);
// "<ul><li>結衣さんは 25歳です。</li><li>翔太さんは 30歳です。</li><li>美咲さんは 28歳です。</li></ul>"
const baseURL = "https://api.example.com";

const params = {
    category: "books",
    limit: 10,
    sort: "desc"
};

// オブジェクトのプロパティをクエリ文字列に変換
const queryString = Object.keys(params)
    .map(key => key + "=" + encodeURIComponent(params[key]))
    .join("&");

const endpoint = `${baseURL}/search?${queryString}`;

console.log(endpoint);
// "https://api.example.com/search?category=books&limit=10&sort=desc"