[[配列 (JavaScript)|配列]]は最もよく利用される[[オブジェクト (JavaScript)|オブジェクト]]の1つです。まずは[[配列 (JavaScript)|配列]]の基礎と、要素の検索方法を学びましょう。
## Reference
- [配列 · JavaScript Primer \#jsprimer](https://jsprimer.net/basic/array/)
## Lesson
### 基礎
[[配列 (JavaScript)|配列]]の作成には[[配列リテラル (JavaScript)|配列リテラル]]を使います。
```js
const xs = [1, 2, 3]
```
[[配列 (JavaScript)|配列]]の要素にアクセスするには `xs[0]` のようなインデックスアクセスを使います。存在しないインデックスを指定した場合は [[undefined (JavaScript)|undefined]] が返ります。
```js
const xs = [1, 2, 3]
xs[1]
// 2
xs[99]
// undefined
```
[[Array.prototype.at (JavaScript)|Array.prototype.at]]を使うと末尾の要素へのアクセスも簡略化できます。
```js
const xs = [1, 2, 3]
xs.at(-1)
// 3
```
値が[[配列 (JavaScript)|配列]]かどうかを確認する場合は [[Array.isArray (JavaScript)|Array.isArray]] を使います。
```js
Array.isArray([1, 2])
// true
Array.isArray({id: 1})
// false
```
### 検索
[[配列 (JavaScript)|配列]]から条件を満たす要素を **1つだけ** 検索する場合は [[Array.prototype.find (JavaScript)|Array.prototype.find]] を使います。
```js
["one", "two", "three", "four", "five"].find((x) => x.length > 3)
// "three"
```
[[配列 (JavaScript)|配列]]から条件を満たす要素を **すべて** 検索する場合は [[Array.prototype.filter (JavaScript)|Array.prototype.filter]] を使います。
```js
["one", "two", "three", "four", "five"].filter((x) => x.length > 3)
// [ "three", "four", "five" ]
```
## Mission 1
#😁EASY
[[Array.prototype.filter (JavaScript)|Array.prototype.filter]] で条件を満たす要素が **1つも存在しなかった** ときの返却値を解答してください。
%%
解答例
```js
[]
```
%%
## Mission 2
#😁EASY
[[Array.prototype.find (JavaScript)|Array.prototype.find]] で条件を満たす要素が **1つも存在しなかった** ときの返却値を解答してください。
%%
解答例
```js
undefined
```
%%
## Mission 3
#🙂NORMAL
以下のコードを **`for` を使わないように** リファクタリングしてください。
```js
function findNegative(numbers) {
for (const n of numbers) {
if (n < 0) {
return n;
}
}
}
```
%%
解答例
```js
function findNegative(numbers) {
return numbers.find((n) => n < 0);
}
```
%%
## Mission 4
#🙂NORMAL
以下のコードを **`for` を使わないように** リファクタリングしてください。
```js
function filterNegative(numbers) {
const negatives = [];
for (const n of numbers) {
if (n < 0) {
negatives.push(n);
}
}
return negatives;
}
```
%%
解答例
```js
function filterNegative(numbers) {
return numbers.filter((n) => n < 0);
}
```
%%
## Mission 5
#🙂NORMAL
以下コードの `findLastAdult` 関数を **2通りの方法で** 実装してください。ただし、**以下の条件を守って**ください。
- `for` を使ってはいけない
- 2つとも [[Array.prototype.filter (JavaScript)|Array.prototype.filter]] を使ってはいけない (1つならOK)
```js
import { expect } from "jsr:@std/expect";
/**
* 最後の成人を返却する
*/
function findLastAdult(guests) {
// FIXME: 実装
}
const guests = [
{ id: 1, name: "Ichiro", age: 28 },
{ id: 2, name: "Jiro", age: 68 },
{ id: 3, name: "Saburo", age: 17 },
{ id: 4, name: "Shiro", age: 12 },
{ id: 5, name: "Goro", age: 21 },
];
Deno.test("test", () => {
expect(findLastAdult(guests)).toEqual({ id: 5, name: "Goro", age: 21 });
});
```
%%
解答例
```js
function findLastAdult(guests) {
return guests.filter((x) => x.age >= 18).at(-1);
}
```
```js
function findLastAdult(guests) {
return guests.findLast((x) => x.age >= 18);
}
```
%%
---
*NEXT* >> [[📗TDQ-016 配列の変換 その1]]