[[配列 (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 文字列の基礎]]