Skip to content

Commit

Permalink
fix(every/fill/filter/find/findIndex/findLastIndex/indexOf/join): fix…
Browse files Browse the repository at this point in the history
… lodash compatibility (#707)

* fix(every/fill/filter/find/findIndex/findLastIndex/indexOf/join): fix lodash compatibility

* test docs

* fix doc

* Update src/compat/array/filter.ts

---------

Co-authored-by: Sojin Park <[email protected]>
  • Loading branch information
D-Sketon and raon0211 authored Oct 14, 2024
1 parent 3ed5a41 commit f37b4ac
Show file tree
Hide file tree
Showing 45 changed files with 755 additions and 170 deletions.
2 changes: 1 addition & 1 deletion benchmarks/performance/every.bench.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { bench, describe } from 'vitest';
import { every as everyEsToolkit_ } from 'es-toolkit';
import { every as everyEsToolkit_ } from 'es-toolkit/compat';
import { every as everyLodash_ } from 'lodash';

const everyEsToolkit = everyEsToolkit_;
Expand Down
17 changes: 17 additions & 0 deletions docs/ja/reference/compat/array/every.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,23 @@ function every<T extends Record<string, unknown>>(object: T, doesMatch: string):

- `arr` (`T[]`) または `object` (`T`): 検索する配列またはオブジェクト。

::: info `arr``ArrayLike<T>``null` または `undefined` である可能性があります

lodash と完全に互換性があるように、`every` 関数は `arr` を次のように処理します:

- `arr``ArrayLike<T>` の場合、`Array.from(...)` を使用して配列に変換されます。
- `arr``null` または `undefined` の場合、空の配列として扱われます。

:::

::: info `object``null` または `undefined` である可能性があります

lodash と完全に互換性があるように、`every` 関数は `object` を次のように処理します:

- `object``null` または `undefined` の場合、空のオブジェクトに変換されます。

:::

- `doesMatch`:

- 配列の場合:
Expand Down
9 changes: 9 additions & 0 deletions docs/ja/reference/compat/array/filter.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,15 @@ function filter<T extends Record<string, unknown>>(object: T, doesMatch: string)

- `arr` (`T[]`) または `object` (`T`): 繰り返し処理する配列やオブジェクト。

::: info `arr``ArrayLike<T>``null` または `undefined` になります

lodash と完全に互換性を保つため、`filter` 関数は `arr` を次のように処理します。

- `arr``ArrayLike<T>` の場合、`Array.from(...)` を使用して配列に変換します。
- `arr``null` または `undefined` の場合、空の配列として扱います。

:::

- `doesMatch`:

- 配列の場合:
Expand Down
17 changes: 17 additions & 0 deletions docs/ja/reference/compat/array/find.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,23 @@ function find<T extends Record<string, unknown>>(object: T, doesMatch: string):

- `arr` (`T[]`) または `object` (`T`): 検索する配列またはオブジェクト。

::: info `arr``ArrayLike<T>` であるか、`null` または `undefined` である可能性があります

lodash と完全に互換性があるように、`find` 関数は `arr` を次のように処理します。

- `arr``ArrayLike<T>` の場合、`Array.from(...)` を使用して配列に変換します。
- `arr``null` または `undefined` の場合、空の配列と見なされます。

:::

::: info `object``null` または `undefined` である可能性があります

lodash と完全に互換性があるように、`find` 関数は `object` を次のように処理します。

- `object``null` または `undefined` の場合、空のオブジェクトに変換されます。

:::

- `doesMatch`:

- 配列の場合:
Expand Down
19 changes: 15 additions & 4 deletions docs/ja/reference/compat/array/findIndex.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,23 +18,34 @@
## インターフェース

```typescript
function findIndex<T>(arr: T[], doesMatch: (item: T, index: number, arr: T[]) => unknown): number;
function findIndex<T>(arr: T[], doesMatch: Partial<T>): number;
function findIndex<T>(arr: T[], doesMatch: [keyof T, unknown]): number;
function findIndex<T>(arr: T[], doesMatch: string): number;
function findIndex<T>(arr: T[], doesMatch: (item: T, index: number, arr: T[]) => unknown, fromIndex?: number): number;
function findIndex<T>(arr: T[], doesMatch: Partial<T>, fromIndex?: number): number;
function findIndex<T>(arr: T[], doesMatch: [keyof T, unknown], fromIndex?: number): number;
function findIndex<T>(arr: T[], doesMatch: string, fromIndex?: number): number;
```

### パラメータ

- `arr` (`T[]`): 検索する配列。

::: info `arr``ArrayLike<T>` であるか、`null` または `undefined` である可能性があります

lodash と完全に互換性があるように、`findIndex` 関数は `arr` を次のように処理します。

- `arr``ArrayLike<T>` の場合、`Array.from(...)` を使用して配列に変換します。
- `arr``null` または `undefined` の場合、空の配列と見なされます。

:::

- `doesMatch`:

- **検査関数** (`(item: T, index: number, arr: T[]) => unknown`): 探している要素かどうかを返す関数。
- **部分オブジェクト** (`Partial<T>`): 一致させるプロパティと値を指定した部分オブジェクト。
- **プロパティ-値ペア** (`[keyof T, unknown]`): 最初が一致させるプロパティ、2番目が一致させる値を表すタプル。
- **プロパティ名** (`string`): 真と評価される値を持っているか確認するプロパティ名。

- `fromIndex` (`number`): 検索を開始するインデックス。デフォルトは `0`

### 戻り値

(`number`): 与えられた条件を満たす最初の要素のインデックス。ない場合は `-1`
Expand Down
9 changes: 9 additions & 0 deletions docs/ja/reference/compat/array/findLastIndex.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,15 @@ function findLastIndex<T>(arr: T[], doesMatch: string, fromIndex?: number): numb

- `arr` (`T[]`): 検索する配列。

::: info `arr``ArrayLike<T>` であるか、`null` または `undefined` である可能性があります

lodash と完全に互換性があるように、`findLastIndex` 関数は `arr` を次のように処理します。

- `arr``ArrayLike<T>` の場合、`Array.from(...)` を使用して配列に変換します。
- `arr``null` または `undefined` の場合、空の配列と見なされます。

:::

- `doesMatch`:

- **検査関数** (`(item: T, index: number, arr: T[]) => unknown`): 探している要素かどうかを返す関数。
Expand Down
14 changes: 12 additions & 2 deletions docs/ja/reference/compat/array/indexOf.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,22 @@
## インターフェース

```typescript
function indexOf<T>(array: T[] | null | undefined, searchElement: T, fromIndex?: number): number;
function indexOf<T>(array: T[], searchElement: T, fromIndex?: number): number;
```

### パラメータ

- `array` (`T[] | null | undefined`): 検索対象の配列。
- `array` (`T[]`): 検索対象の配列。

::: info `array``ArrayLike<T>` または `null` または `undefined` である可能性があります

lodash と完全に互換性があるように、`join` 関数は `array` を次のように処理します。

- `array``ArrayLike<T>` の場合、配列に変換するために `Array.from(...)` を使用します。
- `array``null` または `undefined` の場合、空の配列と見なされます。

:::

- `searchElement` (`T`): 検索する値。
- `fromIndex` (`number`, オプション): 検索を開始するインデックス。

Expand Down
21 changes: 13 additions & 8 deletions docs/ja/reference/compat/array/join.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,22 @@
## インターフェース

```typescript
function join<T>(array: T[], separator: string): string;
function join<T>(array: T[], separator?: string): string;
```

### パラメータ

- `array` (`T[]`) - 結合する配列です。

::: info `array``ArrayLike<T>` であるか、`null` または `undefined` である可能性があります

lodash と完全に互換性があるように、`join` 関数は `array` を次のように処理します。

- `array``ArrayLike<T>` の場合、`Array.from(...)` を使用して配列に変換します。
- `array``null` または `undefined` の場合、空の配列と見なされます。

:::

- `separator` (`string`) - 要素を結合するために用いるセパレータ、デフォルトは一般的なセパレータ `,` です。

### 戻り値
Expand All @@ -25,13 +35,8 @@ function join<T>(array: T[], separator: string): string;

##

````typescript
```typescript
const arr = ["a","b","c"];
const result = join(arr, "~");
const arr = ['a', 'b', 'c'];
const result = join(arr, '~');
console.log(result); // Output: "a~b~c"
````
```

```
17 changes: 17 additions & 0 deletions docs/ko/reference/compat/array/every.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,23 @@ function every<T extends Record<string, unknown>>(object: T, doesMatch: string):

- `arr` (`T[]`) 또는 `object` (`T`): 검색할 배열이나 객체.

::: info `arr``ArrayLike<T>`일 수도 있고, `null` 또는 `undefined`일 수도 있어요

lodash와 완벽하게 호환되도록 `every` 함수는 `arr`을 다음과 같이 처리해요:

- `arr``ArrayLike<T>`인 경우 `Array.from(...)`을 사용하여 배열로 변환해요.
- `arr``null` 또는 `undefined`인 경우 빈 배열로 간주돼요.

:::

::: info `object``null` 또는 `undefined`일 수도 있어요

lodash와 완벽하게 호환되도록 `every` 함수는 `object`를 다음과 같이 처리해요:

- `object``null` 또는 `undefined`인 경우 빈 객체로 변환돼요.

:::

- `doesMatch`:

- 배열의 경우:
Expand Down
9 changes: 9 additions & 0 deletions docs/ko/reference/compat/array/filter.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,15 @@ function filter<T extends Record<string, unknown>>(object: T, doesMatch: string)

- `arr` (`T[]`) or `object` (`T`): 반복할 배열이나 객체.

::: info `arr``ArrayLike<T>`일 수도 있고, `null` 또는 `undefined`일 수도 있어요

lodash와 완벽하게 호환되도록 `filter` 함수는 `arr`을 다음과 같이 처리해요:

- `arr``ArrayLike<T>`인 경우 `Array.from(...)`을 사용하여 배열로 변환해요.
- `arr``null` 또는 `undefined`인 경우 빈 배열로 간주돼요.

:::

- `doesMatch`:

- 배열의 경우:
Expand Down
17 changes: 17 additions & 0 deletions docs/ko/reference/compat/array/find.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,23 @@ function find<T extends Record<string, unknown>>(object: T, doesMatch: string):

- `arr` (`T[]`) or `object` (`T`): 검색할 배열이나 객체.

::: info `arr``ArrayLike<T>`일 수도 있고, `null` 또는 `undefined`일 수도 있어요

lodash와 완벽하게 호환되도록 `find` 함수는 `arr`을 다음과 같이 처리해요:

- `arr``ArrayLike<T>`인 경우 `Array.from(...)`을 사용하여 배열로 변환해요.
- `arr``null` 또는 `undefined`인 경우 빈 배열로 간주돼요.

:::

::: info `object``null` 또는 `undefined`일 수도 있어요

lodash와 완벽하게 호환되도록 `find` 함수는 `object`를 다음과 같이 처리해요:

- `object``null` 또는 `undefined`인 경우 빈 객체로 변환돼요.

:::

- `doesMatch`:

- 배열의 경우:
Expand Down
19 changes: 15 additions & 4 deletions docs/ko/reference/compat/array/findIndex.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,23 +18,34 @@
## 인터페이스

```typescript
function findIndex<T>(arr: T[], doesMatch: (item: T, index: number, arr: T[]) => unknown): number;
function findIndex<T>(arr: T[], doesMatch: Partial<T>): number;
function findIndex<T>(arr: T[], doesMatch: [keyof T, unknown]): number;
function findIndex<T>(arr: T[], doesMatch: string): number;
function findIndex<T>(arr: T[], doesMatch: (item: T, index: number, arr: T[]) => unknown, fromIndex?: number): number;
function findIndex<T>(arr: T[], doesMatch: Partial<T>, fromIndex?: number): number;
function findIndex<T>(arr: T[], doesMatch: [keyof T, unknown], fromIndex?: number): number;
function findIndex<T>(arr: T[], doesMatch: string, fromIndex?: number): number;
```

### 파라미터

- `arr` (`T[]`): 검색할 배열.

::: info `arr``ArrayLike<T>`이거나 `null` 또는 `undefined`일 수 있어요

lodash와 완전히 호환되도록 `findIndex` 함수는 `arr`를 다음과 같이 처리해요.

- `arr``ArrayLike<T>`인 경우, 배열로 변환하기 위해 `Array.from(...)`을 사용해요.
- `arr``null` 또는 `undefined`인 경우, 빈 배열로 간주돼요.

:::

- `doesMatch`:

- **검사 함수** (`(item: T, index: number, arr: T[]) => unknown`): 찾는 요소인지 여부를 반환하는 함수.
- **부분 객체** (`Partial<T>`): 일치시킬 프로퍼티와 값들을 명시한 부분 객체.
- **프로퍼티-값 쌍** (`[keyof T, unknown]`): 첫 번째가 일치시킬 프로퍼티, 두 번째가 일치시킬 값을 나타내는 튜플.
- **프로퍼티 이름** (`string`): 참으로 평가되는 값을 가지고 있는지 확인할 프로퍼티 이름.

- `fromIndex` (`number`): 검색을 시작할 인덱스. 기본값은 `0`.

### 반환 값

(`number`): 주어진 조건을 만족하는 첫 번째 요소의 인덱스. 없으면 `-1`.
Expand Down
17 changes: 13 additions & 4 deletions docs/ko/reference/compat/array/findLastIndex.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,16 +22,25 @@ function findLastIndex<T>(
arr: T[],
doesMatch: (item: T, index: number, arr: T[]) => unknown,
fromIndex?: number
): T | undefined;
function findLastIndex<T>(arr: T[], doesMatch: Partial<T>, fromIndex?: number): T | undefined;
function findLastIndex<T>(arr: T[], doesMatch: [keyof T, unknown], fromIndex?: number): T | undefined;
function findLastIndex<T>(arr: T[], doesMatch: string, fromIndex?: number): T | undefined;
): number;
function findLastIndex<T>(arr: T[], doesMatch: Partial<T>, fromIndex?: number): number;
function findLastIndex<T>(arr: T[], doesMatch: [keyof T, unknown], fromIndex?: number): number;
function findLastIndex<T>(arr: T[], doesMatch: string, fromIndex?: number): number;
```

### 파라미터

- `arr` (`T[]`): 검색할 배열.

::: info `arr``ArrayLike<T>`일 수도 있고, `null` 또는 `undefined`일 수도 있어요

lodash와 완전히 호환되도록 `findLastIndex` 함수는 `arr`를 다음과 같이 처리해요.

- `arr``ArrayLike<T>`인 경우, 배열로 변환하기 위해 `Array.from(...)`을 사용해요.
- `arr``null` 또는 `undefined`인 경우, 빈 배열로 간주돼요.

:::

- `doesMatch`:

- **검사 함수** (`(item: T, index: number, arr: T[]) => unknown`): 찾는 요소인지 여부를 반환하는 함수.
Expand Down
14 changes: 12 additions & 2 deletions docs/ko/reference/compat/array/indexOf.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,22 @@
## 인터페이스

```typescript
function indexOf<T>(array: T[] | null | undefined, searchElement: T, fromIndex?: number): number;
function indexOf<T>(array: T[], searchElement: T, fromIndex?: number): number;
```

### 파라미터

- `array` (`T[] | null | undefined`): 검색할 배열.
- `array` (`T[]`): 검색할 배열.

::: info `array``ArrayLike<T>`이거나 `null` 또는 `undefined`일 수 있어요

lodash와 완전히 호환되도록 `indexOf` 함수는 `array`를 다음과 같이 처리해요.

- `array``ArrayLike<T>`인 경우, 배열로 변환하기 위해 `Array.from(...)`을 사용해요.
- `array``null` 또는 `undefined`인 경우, 빈 배열로 간주돼요.

:::

- `searchElement` (`T`): 찾을 값.
- `fromIndex` (`number`, 선택): 검색을 시작할 인덱스.

Expand Down
12 changes: 11 additions & 1 deletion docs/ko/reference/compat/array/join.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,22 @@
## 인터페이스

```typescript
function join<T>(array: T[], separator: string): string;
function join<T>(array: T[], separator?: string): string;
```

### 파라미터

- `array` (`T[]`) - 결합할 배열이에요.

::: info `array``ArrayLike<T>`이거나 `null` 또는 `undefined`일 수 있어요

lodash와 완전히 호환되도록 `join` 함수는 `array`를 다음과 같이 처리해요.

- `array``ArrayLike<T>`인 경우, 배열로 변환하기 위해 `Array.from(...)`을 사용해요.
- `array``null` 또는 `undefined`인 경우, 빈 배열로 간주돼요.

:::

- `separator` (`string`) - 요소를 결합하는 데 사용하는 구분자. 기본값은 쉼표(,)에요.

### 반환 값
Expand Down
17 changes: 17 additions & 0 deletions docs/reference/compat/array/every.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,23 @@ function every<T extends Record<string, unknown>>(object: T, doesMatch: string):

- `arr` (`T[]`) or `object` (`T`): The array or object to search through.

::: info `arr` can be `ArrayLike<T>`, `null`, or `undefined`

To ensure full compatibility with lodash, the every function handles `arr` in this way:

- If arr is an `ArrayLike<T>`, it gets converted into an array using `Array.from(...)`.
- If arr is `null` or `undefined`, it will be treated as an empty array.

:::

::: info `object` can be `null` or `undefined`

To ensure full compatibility with lodash, the every function handles `object` in this way:

- If `object` is `null` or `undefined`, it will be converted into an empty object.

:::

- `doesMatch`:

- For the first `every` overload with arrays:
Expand Down
Loading

0 comments on commit f37b4ac

Please sign in to comment.