[[配列 (JavaScript)|配列]]最後のクエストは条件判定の[[メソッド (JavaScript)|メソッド]]です。[[配列 (JavaScript)|配列]]を引数にとり、boolean型の値を返すメソッドを学びましょう。 ## Reference - [配列 · JavaScript Primer \#jsprimer](https://jsprimer.net/basic/array/) ## Lesson ### includes ある要素が[[配列 (JavaScript)|配列]]に含まれるかどうかを判定するには、[[Array.prototype.includes (JavaScript)|Array.prototype.includes]]を使います。 ```js [1, 2, 3].includes(2) // true [1, 2, 3].includes(10) // false ``` ### every [[配列 (JavaScript)|配列]]の**すべての**要素が条件を満たすかどうかを判定するには、[[Array.prototype.every (JavaScript)|Array.prototype.every]]を使います。 ```js [1, 2, 3].every((x) => x < 5) // true [1, 2, 30].every((x) => x < 5) // false ``` ### some [[配列 (JavaScript)|配列]]の**いずれかの**要素が条件を満たすかどうかを判定するには、[[Array.prototype.some (JavaScript)|Array.prototype.some]]を使います。 ```js [1, 20, 30].some((x) => x < 5) // true [10, 20, 30].some((x) => x < 5) // false ``` ## Mission 1 #🙂NORMAL 以下のコードをリファクタリングしてください。 ```js function hoge(xs, predicate) { for (const x of xs) { if (predicate(x)) { return true; } } return false; } ``` %% 解答例 ```js function hoge(xs, predicate) { return xs.some(predicate); } ``` %% > [!hint]- Hint 1 > 関数の中身はreturn文1文で書けます。 ## Mission 2 #🙂NORMAL 以下のコードをリファクタリングしてください。 ```js function hoge(xs, predicate) { for (const x of xs) { if (!predicate(x)) { return false; } } return true; } ``` %% 解答例 ```js function hoge(xs, predicate) { return xs.every(predicate); } ``` %% > [!hint]- Hint 1 > 関数の中身はreturn文1文で書けます。 ## Mission 3 #😵HARD 以下のコードをテストコードを書いたうえでリファクタリングしてください。 ```js function hoge(box, target) { for (const xs of box) { let includesX = false; for (const x of xs) { if (x === target) { includesX = true; break; } } if (!includesX) { return false; } } return true; } ``` %% 解答例 テストコード。 ```js import { expect } from "jsr:@std/expect"; Deno.test("targetがすべての配列に含まれていたらtrue", () => { expect(hoge([[1, 2], [1, 3]], 1)).toBe(true); }); Deno.test("targetがすべての配列に含まれていなければfalse", () => { expect(hoge([[1, 2], [1, 3]], 2)).toBe(false); }); Deno.test("配列が空の場合はfalse", () => { expect(hoge([[]], 2)).toBe(false); }); Deno.test("boxが空の場合はtrue", () => { expect(hoge([], 2)).toBe(true); }); ``` リファクタリングしたコード。 ```js function hoge(box, target) { return box.every((xs) => xs.includes(target)); } ``` %% > [!hint]- Hint 1 > 関数の中身はreturn文1文で書けます。 > [!hint]- Hint 2 > hoge関数の挙動は『二次元配列boxの各要素(配列)に対し、すべての要素(配列)にtargetが含まれている場合のみtrueを返す。そうでなければfalseを返す。』です。 --- *NEXT* >> [[📗TDQ-019 文字列の基礎]]