docs: Translate and create Japanese version (#432)

* docs: translate and create Japanese version

* docs: run prettier

* Apply suggestions from code review

---------

Co-authored-by: Sojin Park <raon0211@gmail.com>
This commit is contained in:
Yusuke Hayashi 2024-08-28 23:19:07 +09:00 committed by GitHub
parent 55fae71d06
commit d45bc3352b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
149 changed files with 6260 additions and 2 deletions

View File

@ -4,7 +4,7 @@
[English](https://github.com/toss/es-toolkit/blob/main/README.md) | [한국어](https://github.com/toss/es-toolkit/blob/main/README-ko_kr.md) | [简体中文](https://github.com/toss/es-toolkit/blob/main/README-zh_hans.md) | 日本語
es-toolkitは、最のJavaScriptユーティリティライブラリであり、高性能で小さなバンドルサイズ、強力な型注釈を提供します。
es-toolkitは、最先端のJavaScriptユーティリティライブラリであり、高性能で小さなバンドルサイズ、強力な型注釈を提供します。
- es-toolkitは、[debounce](https://es-toolkit.slash.page/reference/function/debounce.html)、[delay](https://es-toolkit.slash.page/reference/promise/delay.html)、[chunk](https://es-toolkit.slash.page/reference/array/chunk.html)、[sum](https://es-toolkit.slash.page/reference/math/sum.html)、[pick](https://es-toolkit.slash.page/reference/object/pick.html)など、日常的に使用するさまざまなユーティリティ関数を最新の実装で提供します。
- パフォーマンスを重視して設計されており、es-toolkitは最新のJavaScript環境で[2-3倍の性能向上](https://es-toolkit.slash.page/performance.html)を実現します。

View File

@ -3,6 +3,7 @@ import container from 'markdown-it-container';
import { renderSandbox } from 'vitepress-plugin-sandpack';
import { en } from './en.mts';
import { ko } from './ko.mts';
import { ja } from './ja.mts';
import { zh_hans } from './zh_hans.mts';
import { shared } from './shared.mts';
@ -12,6 +13,7 @@ export default defineConfig({
root: { label: 'English', ...en },
ko: { label: '한국어', ...ko },
zh_hans: { label: '简体中文', ...zh_hans },
ja: { label: '日本語', ...ja },
},
markdown: {
config(md) {

257
docs/.vitepress/ja.mts Normal file
View File

@ -0,0 +1,257 @@
import { type DefaultTheme, defineConfig } from 'vitepress';
export const ja = defineConfig({
lang: 'ja',
description: '高速なパフォーマンスと小さなバンドルサイズを持つ最先端のJavaScriptユーティリティライブラリ',
themeConfig: {
nav: nav(),
sidebar: sidebar(),
editLink: {
pattern: 'https://github.com/toss/es-toolkit/edit/main/docs/:path',
text: 'GitHubで編集する',
},
footer: {
message: 'MIT ライセンスの下で配布されています。',
copyright: `Copyright © ${new Date().getFullYear()} Viva Republica, Inc.`,
},
},
});
function nav(): DefaultTheme.NavItem[] {
return [
{ text: 'ホーム', link: '/ja' },
{ text: '導入', link: '/ja/intro' },
{ text: 'リファレンス', link: '/ja/reference/array/chunk' },
];
}
function sidebar(): DefaultTheme.Sidebar {
return [
{
text: 'ガイド',
items: [
{ text: '紹介', link: '/ja/intro' },
{ text: 'インストールと使用方法', link: '/ja/usage' },
{ text: 'バンドルサイズ', link: '/ja/bundle-size' },
{ text: 'パフォーマンス', link: '/ja/performance' },
{ text: 'Lodash との互換性', link: '/ja/compatibility' },
],
},
{
text: 'リファレンス',
items: [
{
text: '配列',
items: [
{ text: 'chunk', link: '/ja/reference/array/chunk' },
{ text: 'concat (compat)', link: '/ja/reference/compat/array/concat' },
{ text: 'countBy', link: '/ja/reference/array/countBy' },
{ text: 'compact', link: '/ja/reference/array/compact' },
{ text: 'difference', link: '/ja/reference/array/difference' },
{ text: 'differenceBy', link: '/ja/reference/array/differenceBy' },
{ text: 'differenceWith', link: '/ja/reference/array/differenceWith' },
{ text: 'drop', link: '/ja/reference/array/drop' },
{ text: 'dropWhile', link: '/ja/reference/array/dropWhile' },
{ text: 'dropRight', link: '/ja/reference/array/dropRight' },
{ text: 'dropRightWhile', link: '/ja/reference/array/dropRightWhile' },
{ text: 'fill', link: '/ja/reference/array/fill' },
{ text: 'toFilled', link: '/ja/reference/array/toFilled' },
{ text: 'find (compat)', link: '/ja/reference/compat/array/find' },
{ text: 'findIndex (compat)', link: '/ja/reference/compat/array/findIndex' },
{ text: 'flatMap', link: '/ja/reference/array/flatMap' },
{ text: 'flatten', link: '/ja/reference/array/flatten' },
{ text: 'flattenDeep', link: '/ja/reference/array/flattenDeep' },
{ text: 'forEachRight', link: '/ja/reference/array/forEachRight' },
{ text: 'groupBy', link: '/ja/reference/array/groupBy' },
{ text: 'indexOf (compat)', link: '/ja/reference/compat/array/indexOf' },
{ text: 'intersection', link: '/ja/reference/array/intersection' },
{ text: 'intersectionBy', link: '/ja/reference/array/intersectionBy' },
{
text: 'intersectionWith',
link: '/ja/reference/array/intersectionWith',
},
{ text: 'isSubset', link: '/ja/reference/array/isSubset' },
{ text: 'keyBy', link: '/ja/reference/array/keyBy' },
{ text: 'minBy', link: '/ja/reference/array/minBy' },
{ text: 'maxBy', link: '/ja/reference/array/maxBy' },
{ text: 'min (compat)', link: '/ja/reference/compat/array/min' },
{ text: 'max (compat)', link: '/ja/reference/compat/array/max' },
{ text: 'orderBy', link: '/ja/reference/array/orderBy' },
{ text: 'partition', link: '/ja/reference/array/partition' },
{ text: 'sample', link: '/ja/reference/array/sample' },
{ text: 'sampleSize', link: '/ja/reference/array/sampleSize' },
{ text: 'shuffle', link: '/ja/reference/array/shuffle' },
{ text: 'size (compat)', link: '/ja/reference/compat/array/size' },
{ text: 'sortBy', link: '/ja/reference/array/sortBy' },
{ text: 'take', link: '/ja/reference/array/take' },
{ text: 'takeWhile', link: '/ja/reference/array/takeWhile' },
{ text: 'takeRight', link: '/ja/reference/array/takeRight' },
{ text: 'takeRightWhile', link: '/ja/reference/array/takeRightWhile' },
{ text: 'union', link: '/ja/reference/array/union' },
{ text: 'unionBy', link: '/ja/reference/array/unionBy' },
{ text: 'unionWith', link: '/ja/reference/array/unionWith' },
{ text: 'uniq', link: '/ja/reference/array/uniq' },
{ text: 'uniqBy', link: '/ja/reference/array/uniqBy' },
{ text: 'uniqWith', link: '/ja/reference/array/uniqWith' },
{ text: 'unzip', link: '/ja/reference/array/unzip' },
{ text: 'unzipWith', link: '/ja/reference/array/unzipWith' },
{ text: 'without', link: '/ja/reference/array/without' },
{ text: 'xor', link: '/ja/reference/array/xor' },
{ text: 'xorBy', link: '/ja/reference/array/xorBy' },
{ text: 'xorWith', link: '/ja/reference/array/xorWith' },
{ text: 'zip', link: '/ja/reference/array/zip' },
{ text: 'zipObject', link: '/ja/reference/array/zipObject' },
{ text: 'zipObjectDeep (compat)', link: '/ja/reference/compat/array/zipObjectDeep' },
{ text: 'zipWith', link: '/ja/reference/array/zipWith' },
{ text: 'head', link: '/ja/reference/array/head' },
{ text: 'tail', link: '/ja/reference/array/tail' },
{ text: 'last', link: '/ja/reference/array/last' },
{ text: 'initial', link: '/ja/reference/array/initial' },
],
},
{
text: '関数',
items: [
{ text: 'before', link: '/ja/reference/function/before' },
{ text: 'after', link: '/ja/reference/function/after' },
{ text: 'debounce', link: '/ja/reference/function/debounce' },
{ text: 'throttle', link: '/ja/reference/function/throttle' },
{ text: 'negate', link: '/ja/reference/function/negate' },
{ text: 'once', link: '/ja/reference/function/once' },
{ text: 'noop', link: '/ja/reference/function/noop' },
{ text: 'memoize', link: '/ja/reference/function/memoize' },
{ text: 'ary', link: '/ja/reference/function/ary' },
{ text: 'unary', link: '/ja/reference/function/unary' },
{ text: 'bind (compat)', link: '/ja/reference/compat/function/bind' },
{ text: 'partial', link: '/ja/reference/function/partial' },
{ text: 'partialRight', link: '/ja/reference/function/partialRight' },
{ text: 'rest', link: '/ja/reference/function/rest' },
],
},
{
text: '数学',
items: [
{ text: 'clamp', link: '/ja/reference/math/clamp' },
{ text: 'inRange', link: '/ja/reference/math/inRange' },
{ text: 'mean', link: '/ja/reference/math/mean' },
{ text: 'meanBy', link: '/ja/reference/math/meanBy' },
{ text: 'random', link: '/ja/reference/math/random' },
{ text: 'randomInt', link: '/ja/reference/math/randomInt' },
{ text: 'range', link: '/ja/reference/math/range' },
{ text: 'round', link: '/ja/reference/math/round' },
{ text: 'sum', link: '/ja/reference/math/sum' },
{ text: 'sumBy', link: '/ja/reference/math/sumBy' },
],
},
{
text: 'オブジェクト',
items: [
{ text: 'clone', link: '/ja/reference/object/clone' },
{ text: 'cloneDeep', link: '/ja/reference/object/cloneDeep' },
{ text: 'invert', link: '/ja/reference/object/invert' },
{ text: 'flattenObject', link: '/ja/reference/object/flattenObject' },
{ text: 'mapKeys', link: '/ja/reference/object/mapKeys' },
{ text: 'mapValues', link: '/ja/reference/object/mapValues' },
{ text: 'merge', link: '/ja/reference/object/merge' },
{ text: 'mergeWith', link: '/ja/reference/object/mergeWith' },
{ text: 'toMerged', link: '/ja/reference/object/toMerged' },
{ text: 'omit', link: '/ja/reference/object/omit' },
{ text: 'omitBy', link: '/ja/reference/object/omitBy' },
{ text: 'pick', link: '/ja/reference/object/pick' },
{ text: 'pickBy', link: '/ja/reference/object/pickBy' },
{ text: 'get (compat)', link: '/ja/reference/compat/object/get' },
{ text: 'set (compat)', link: '/ja/reference/compat/object/set' },
{ text: 'has (compat)', link: '/ja/reference/compat/object/has' },
{ text: 'property (compat)', link: '/ja/reference/compat/object/property' },
],
},
{
text: '述語',
items: [
{ text: 'isArguments (compat)', link: '/ja/reference/compat/predicate/isArguments' },
{ text: 'isArray (compat)', link: '/ja/reference/compat/predicate/isArray' },
{ text: 'isArrayLike (compat)', link: '/ja/reference/compat/predicate/isArrayLike' },
{ text: 'isBoolean', link: '/ja/reference/predicate/isBoolean' },
{ text: 'isEqual', link: '/ja/reference/predicate/isEqual' },
{ text: 'isFunction', link: '/ja/reference/predicate/isFunction' },
{ text: 'isLength', link: '/ja/reference/predicate/isLength' },
{ text: 'isPlainObject', link: '/ja/reference/predicate/isPlainObject' },
{ text: 'isPrimitive', link: '/ja/reference/predicate/isPrimitive' },
{ text: 'isString', link: '/ja/reference/predicate/isString' },
{ text: 'isSymbol', link: '/ja/reference/predicate/isSymbol' },
{ text: 'isMatch (compat)', link: '/ja/reference/compat/predicate/isMatch' },
{ text: 'matches (compat)', link: '/ja/reference/compat/predicate/matches' },
{ text: 'matchesProperty (compat)', link: '/ja/reference/compat/predicate/matchesProperty' },
{ text: 'isNil', link: '/ja/reference/predicate/isNil' },
{ text: 'isNotNil', link: '/ja/reference/predicate/isNotNil' },
{ text: 'isNull', link: '/ja/reference/predicate/isNull' },
{ text: 'isObjectLike (compat)', link: '/ja/reference/compat/predicate/isObjectLike' },
{ text: 'isTypedArray', link: '/ja/reference/predicate/isTypedArray' },
{ text: 'isUndefined', link: '/ja/reference/predicate/isUndefined' },
],
},
{
text: 'Promise',
items: [
{ text: 'delay', link: '/ja/reference/promise/delay' },
{ text: 'timeout', link: '/ja/reference/promise/timeout' },
{ text: 'withTimeout', link: '/ja/reference/promise/withTimeout' },
],
},
{
text: '文字列',
items: [
{ text: 'camelCase', link: '/ja/reference/string/camelCase' },
{ text: 'snakeCase', link: '/ja/reference/string/snakeCase' },
{ text: 'kebabCase', link: '/ja/reference/string/kebabCase' },
{ text: 'lowerCase', link: '/ja/reference/string/lowerCase' },
{ text: 'startCase', link: '/ja/reference/string/startCase' },
{ text: 'pascalCase', link: '/ja/reference/string/pascalCase' },
{ text: 'capitalize', link: '/ja/reference/string/capitalize' },
{ text: 'startsWith (compat)', link: '/ja/reference/compat/string/startsWith' },
{ text: 'endsWith (compat)', link: '/ja/reference/compat/string/endsWith' },
{ text: 'padStart (compat)', link: '/ja/reference/compat/string/padStart' },
{ text: 'padEnd (compat)', link: '/ja/reference/compat/string/padEnd' },
],
},
{
text: 'エラー',
items: [
{ text: 'AbortError', link: '/ja/reference/error/AbortError' },
{ text: 'TimeoutError', link: '/ja/reference/error/TimeoutError' },
],
},
],
},
];
}
export const search: DefaultTheme.LocalSearchOptions['locales'] = {
ja: {
translations: {
button: {
buttonText: '検索',
buttonAriaLabel: '検索',
},
modal: {
backButtonTitle: '戻る',
displayDetails: '詳細を表示',
footer: {
closeKeyAriaLabel: '閉じる',
closeText: '閉じる',
navigateDownKeyAriaLabel: '下へ',
navigateText: '移動',
navigateUpKeyAriaLabel: '上へ',
selectKeyAriaLabel: '選択',
selectText: '選択',
},
noResultsText: '検索結果が見つかりませんでした。',
resetButtonTitle: 'すべてクリア',
},
},
},
};

36
docs/ja/bundle-size.md Normal file
View File

@ -0,0 +1,36 @@
---
description: es-toolkitが持つ小さなバンドルサイズ
---
# バンドルサイズ
![es-toolkitとlodashのバンドルサイズを比較するグラフ。es-toolkitは最大97%小さいバンドルサイズを持つ。](/assets/bundle-size.png)
es-toolkitは現代的な実装を持っているため、他のライブラリと比べて非常に小さなバンドルサイズを持っています。[lodash](https://lodash.com)と比較すると、関数によっては最大97%小さいサイズになります。
この観点から、es-toolkitはバンドルサイズを削減するのに最も効果的な選択肢です。いくつかのユーティリティ関数は100バイト未満のサイズです。
## バンドルサイズの比較
| | es-toolkit@0.0.1 | lodash-es@4.17.21 | Difference |
| ------------------------------------------ | ---------------- | ----------------- | ---------- |
| [sample](./reference/array/sample) | 88 bytes | 2000 bytes | -95.6% |
| [difference](./reference/array/difference) | 91 bytes | 3190 bytes | -97.2% |
| [sum](./reference/math/sum) | 152 bytes | 413 bytes | -63.2% |
| [debounce](./reference/function/debounce) | 144 bytes | 1400 bytes | -89.7% |
| [throttle](./reference/function/throttle) | 110 bytes | 1460 bytes | -92.5% |
| [pick](./reference/object/pick) | 657 bytes | 3860 bytes | -83.0% |
| [zip](./reference/array/zip) | 797 bytes | 1790 bytes | -55.5% |
## バンドルサイズの測定方法
[esbuild 0.23.0](https://esbuild.github.io)でバンドルサイズを測定しています。以下のようなコードを使用しています。
```tsx
import { chunk } from 'es-toolkit';
// または import { chunk } from 'lodash-es';
console.log(chunk);
```
[バンドルサイズ測定ベンチマークコード](https://github.com/toss/es-toolkit/tree/main/benchmarks/bundle-size)を参照してください。

394
docs/ja/compatibility.md Normal file
View File

@ -0,0 +1,394 @@
# Lodashとの互換性
```tsx
// es-toolkit/compatはlodashと100%同じ動作を提供することを目指しています
import { chunk } from 'es-toolkit/compat';
// es-toolkitは元々chunkのサイズとして0をサポートしていませんでした
chunk([1, 2, 3, 4], 0);
// es-toolkit/compatはlodashと同じ[]を返します
```
`lodash`との最大の互換性を確保するために、2つのライブラリ間のギャップを埋める互換レイヤーである`es-toolkit/compat`を使用してください。
`es-toolkit`はスムーズなマイグレーションを保証するために、2つのライブラリ間の動作の違いがない`es-toolkit/compat`ライブラリを開発しています。`lodash`と同じAPIと機能を提供し、スムーズにマイグレーションできるようサポートする予定です。
`es-toolkit/compat`は実際の`lodash`テストコードを使用してテストされます。
`es-toolkit/compat`は、元の`es-toolkit`と比較して若干のパフォーマンス低下とバンドルサイズの増加があることに注意してください。このモジュールはスムーズな移行を支援するために設計されており、移行が完了したら最適なパフォーマンスを得るために元の`es-toolkit`に置き換えるべきです。
## デザイン原則
::: info
デザイン原則は変更される可能性があります。
:::
`es-toolkit/compat`は以下のような機能について`lodash`と100%同じ機能を提供することを目指しています。
- `lodash`のテストケースで作成された機能
- `@types/lodash`または`@types/lodash-es`の型から推論できる機能
以下のような機能は`es-toolkit/compat`ではサポートしていません。
- 空文字列を0またはfalseに変換するような暗黙的な型変換
- [sortedUniq](https://lodash.com/docs/4.17.15#sortedUniq)のような特定のタイプの配列に特化した実装を持つ関数
- `Array.prototype`のようなJavaScriptの組み込みオブジェクトのプロトタイプが変更された場合に対応するコード
- JavaScript Realmに対応するコード
- `_(arr).map(...).filter(...)`のような"Seq"メソッドを通じたメソッドチェーンのサポート
## 実装ステータス
::: info
以下の絵文字は各機能の実装ステータスを示しています:
- ✅: 完了関数は完全に実装され、lodashのテストコードで全てのテストに合格しています。
- 📝: レビュー中関数は実装されていますが、まだlodashのテストコードでテストされていません。
- ❌: 未実装(関数はまだ実装されていません。)
"レビュー中"と表示されていても、完全に同じか確認しているだけですでに同じ機能を提供しているかもしれません。
:::
### "Array" メソッド
| Function Name | Implementation Status |
| ---------------------------------------------------------------------- | --------------------- |
| [chunk](https://lodash.com/docs/4.17.15#chunk) | ✅ |
| [compact](https://lodash.com/docs/4.17.15#compact) | ✅ |
| [concat](https://lodash.com/docs/4.17.15#concat) | ✅ |
| [difference](https://lodash.com/docs/4.17.15#difference) | ✅ |
| [differenceBy](https://lodash.com/docs/4.17.15#differenceBy) | 📝 |
| [differenceWith](https://lodash.com/docs/4.17.15#differenceWith) | 📝 |
| [drop](https://lodash.com/docs/4.17.15#drop) | ✅ |
| [dropRight](https://lodash.com/docs/4.17.15#dropRight) | ✅ |
| [dropRightWhile](https://lodash.com/docs/4.17.15#dropRightWhile) | 📝 |
| [dropWhile](https://lodash.com/docs/4.17.15#dropWhile) | 📝 |
| [fill](https://lodash.com/docs/4.17.15#fill) | ✅ |
| [findIndex](https://lodash.com/docs/4.17.15#findIndex) | ✅ |
| [findLastIndex](https://lodash.com/docs/4.17.15#findIndex) | ❌ |
| [flatten](https://lodash.com/docs/4.17.15#flatten) | ✅ |
| [flattenDeep](https://lodash.com/docs/4.17.15#flattenDeep) | ✅ |
| [flattenDepth](https://lodash.com/docs/4.17.15#flattenDepth) | ✅ |
| [fromPairs](https://lodash.com/docs/4.17.15#fromPairs) | ❌ |
| [head](https://lodash.com/docs/4.17.15#head) | ✅ |
| [indexOf](https://lodash.com/docs/4.17.15#indexOf) | ✅ |
| [initial](https://lodash.com/docs/4.17.15#initial) | ✅ |
| [intersection](https://lodash.com/docs/4.17.15#intersection) | 📝 |
| [intersectionBy](https://lodash.com/docs/4.17.15#intersectionBy) | 📝 |
| [intersectionWith](https://lodash.com/docs/4.17.15#intersectionWith) | 📝 |
| [join](https://lodash.com/docs/4.17.15#join) | ❌ |
| [last](https://lodash.com/docs/4.17.15#last) | ✅ |
| [lastIndexOf](https://lodash.com/docs/4.17.15#lastIndexOf) | ❌ |
| [nth](https://lodash.com/docs/4.17.15#nth) | ❌ |
| [pull](https://lodash.com/docs/4.17.15#pull) | ❌ |
| [pullAll](https://lodash.com/docs/4.17.15#pullAll) | ❌ |
| [pullAllBy](https://lodash.com/docs/4.17.15#pullAllBy) | ❌ |
| [pullAllWith](https://lodash.com/docs/4.17.15#pullAllWith) | ❌ |
| [pullAt](https://lodash.com/docs/4.17.15#pullAt) | ❌ |
| [remove](https://lodash.com/docs/4.17.15#remove) | ❌ |
| [reverse](https://lodash.com/docs/4.17.15#reverse) | ❌ |
| [slice](https://lodash.com/docs/4.17.15#slice) | ❌ |
| [sortedIndex](https://lodash.com/docs/4.17.15#sortedIndex) | No support |
| [sortedIndexBy](https://lodash.com/docs/4.17.15#sortedIndexBy) | No support |
| [sortedIndexOf](https://lodash.com/docs/4.17.15#sortedIndexOf) | No support |
| [sortedLastIndex](https://lodash.com/docs/4.17.15#sortedLastIndex) | No support |
| [sortedLastIndexBy](https://lodash.com/docs/4.17.15#sortedLastIndexBy) | No support |
| [sortedLastIndexOf](https://lodash.com/docs/4.17.15#sortedLastIndexOf) | No support |
| [sortedUniq](https://lodash.com/docs/4.17.15#sortedUniq) | No support |
| [sortedUniqBy](https://lodash.com/docs/4.17.15#sortedUniqBy) | No support |
| [tail](https://lodash.com/docs/4.17.15#tail) | ✅ |
| [take](https://lodash.com/docs/4.17.15#take) | ✅ |
| [takeRight](https://lodash.com/docs/4.17.15#takeRight) | ✅ |
| [takeRightWhile](https://lodash.com/docs/4.17.15#takeRightWhile) | 📝 |
| [takeWhile](https://lodash.com/docs/4.17.15#takeWhile) | 📝 |
| [union](https://lodash.com/docs/4.17.15#union) | 📝 |
| [unionBy](https://lodash.com/docs/4.17.15#unionBy) | 📝 |
| [unionWith](https://lodash.com/docs/4.17.15#unionWith) | 📝 |
| [uniq](https://lodash.com/docs/4.17.15#uniq) | ✅ |
| [uniqBy](https://lodash.com/docs/4.17.15#uniqBy) | 📝 |
| [uniqWith](https://lodash.com/docs/4.17.15#uniqWith) | 📝 |
| [unzip](https://lodash.com/docs/4.17.15#unzip) | 📝 |
| [unzipWith](https://lodash.com/docs/4.17.15#unzipWith) | 📝 |
| [without](https://lodash.com/docs/4.17.15#without) | ✅ |
| [xor](https://lodash.com/docs/4.17.15#xor) | 📝 |
| [xorBy](https://lodash.com/docs/4.17.15#xorBy) | 📝 |
| [xorWith](https://lodash.com/docs/4.17.15#xorWith) | 📝 |
| [zip](https://lodash.com/docs/4.17.15#zip) | 📝 |
| [zipObject](https://lodash.com/docs/4.17.15#zipObject) | 📝 |
| [zipObjectDeep](https://lodash.com/docs/4.17.15#zipObjectDeep) | ✅ |
| [zipWith](https://lodash.com/docs/4.17.15#zipWith) | 📝 |
### "Collection" メソッド
| Function Name | Implementation Status |
| ------------------------------------------------------------ | --------------------- |
| [countBy](https://lodash.com/docs/4.17.15#countBy) | 📝 |
| [every](https://lodash.com/docs/4.17.15#every) | ❌ |
| [filter](https://lodash.com/docs/4.17.15#filter) | ❌ |
| [find](https://lodash.com/docs/4.17.15#find) | ❌ |
| [findLast](https://lodash.com/docs/4.17.15#findLast) | ❌ |
| [flatMap](https://lodash.com/docs/4.17.15#flatMap) | ❌ |
| [flatMapDeep](https://lodash.com/docs/4.17.15#flatMapDeep) | ❌ |
| [flatMapDepth](https://lodash.com/docs/4.17.15#flatMapDepth) | ❌ |
| [forEach](https://lodash.com/docs/4.17.15#forEach) | ❌ |
| [forEachRight](https://lodash.com/docs/4.17.15#forEachRight) | ❌ |
| [groupBy](https://lodash.com/docs/4.17.15#groupBy) | 📝 |
| [includes](https://lodash.com/docs/4.17.15#includes) | ❌ |
| [invokeMap](https://lodash.com/docs/4.17.15#invokeMap) | ❌ |
| [keyBy](https://lodash.com/docs/4.17.15#keyBy) | 📝 |
| [map](https://lodash.com/docs/4.17.15#map) | ❌ |
| [orderBy](https://lodash.com/docs/4.17.15#orderBy) | ✅ |
| [partition](https://lodash.com/docs/4.17.15#partition) | 📝 |
| [reduce](https://lodash.com/docs/4.17.15#reduce) | ❌ |
| [reduceRight](https://lodash.com/docs/4.17.15#reduceRight) | ❌ |
| [reject](https://lodash.com/docs/4.17.15#reject) | ❌ |
| [sample](https://lodash.com/docs/4.17.15#sample) | 📝 |
| [sampleSize](https://lodash.com/docs/4.17.15#sampleSize) | 📝 |
| [shuffle](https://lodash.com/docs/4.17.15#shuffle) | 📝 |
| [size](https://lodash.com/docs/4.17.15#size) | ✅ |
| [some](https://lodash.com/docs/4.17.15#some) | ❌ |
| [sortBy](https://lodash.com/docs/4.17.15#sortBy) | ❌ |
### "Date" メソッド
| Function Name | Implementation Status |
| ------------------------------------------ | --------------------- |
| [now](https://lodash.com/docs/4.17.15#now) | ❌ |
### "Function" メソッド
| Function Name | Implementation Status |
| ------------------------------------------------------------ | --------------------- |
| [after](https://lodash.com/docs/4.17.15#after) | 📝 |
| [ary](https://lodash.com/docs/4.17.15#ary) | 📝 |
| [before](https://lodash.com/docs/4.17.15#before) | ❌ |
| [bind](https://lodash.com/docs/4.17.15#bind) | ✅ |
| [bindKey](https://lodash.com/docs/4.17.15#bindKey) | ❌ |
| [curry](https://lodash.com/docs/4.17.15#curry) | ❌ |
| [curryRight](https://lodash.com/docs/4.17.15#curryRight) | ❌ |
| [debounce](https://lodash.com/docs/4.17.15#debounce) | 📝 |
| [defer](https://lodash.com/docs/4.17.15#defer) | ❌ |
| [delay](https://lodash.com/docs/4.17.15#delay) | ❌ |
| [flip](https://lodash.com/docs/4.17.15#flip) | ❌ |
| [memoize](https://lodash.com/docs/4.17.15#memoize) | ❌ |
| [negate](https://lodash.com/docs/4.17.15#negate) | 📝 |
| [once](https://lodash.com/docs/4.17.15#once) | 📝 |
| [overArgs](https://lodash.com/docs/4.17.15#overArgs) | ❌ |
| [partial](https://lodash.com/docs/4.17.15#partial) | 📝 |
| [partialRight](https://lodash.com/docs/4.17.15#partialRight) | 📝 |
| [rearg](https://lodash.com/docs/4.17.15#rearg) | ❌ |
| [rest](https://lodash.com/docs/4.17.15#rest) | ✅ |
| [spread](https://lodash.com/docs/4.17.15#spread) | ❌ |
| [throttle](https://lodash.com/docs/4.17.15#throttle) | 📝 |
| [unary](https://lodash.com/docs/4.17.15#unary) | 📝 |
| [wrap](https://lodash.com/docs/4.17.15#wrap) | ❌ |
### "Lang" methods
| Function Name | Implementation Status |
| ---------------------------------------------------------------------- | --------------------- |
| [castArray](https://lodash.com/docs/4.17.15#castArray) | ❌ |
| [clone](https://lodash.com/docs/4.17.15#clone) | 📝 |
| [cloneDeep](https://lodash.com/docs/4.17.15#cloneDeep) | ✅ |
| [cloneDeepWith](https://lodash.com/docs/4.17.15#cloneDeepWith) | ❌ |
| [cloneWith](https://lodash.com/docs/4.17.15#cloneWith) | ❌ |
| [conformsTo](https://lodash.com/docs/4.17.15#conformsTo) | ❌ |
| [eq](https://lodash.com/docs/4.17.15#eq) | ❌ |
| [gt](https://lodash.com/docs/4.17.15#gt) | ❌ |
| [gte](https://lodash.com/docs/4.17.15#gte) | ❌ |
| [isArguments](https://lodash.com/docs/4.17.15#isArguments) | ✅ |
| [isArray](https://lodash.com/docs/4.17.15#isArray) | ✅ |
| [isArrayBuffer](https://lodash.com/docs/4.17.15#isArrayBuffer) | ❌ |
| [isArrayLike](https://lodash.com/docs/4.17.15#isArrayLike) | ✅ |
| [isArrayLikeObject](https://lodash.com/docs/4.17.15#isArrayLikeObject) | ❌ |
| [isBoolean](https://lodash.com/docs/4.17.15#isBoolean) | ✅ |
| [isBuffer](https://lodash.com/docs/4.17.15#isBuffer) | ❌ |
| [isDate](https://lodash.com/docs/4.17.15#isDate) | ❌ |
| [isElement](https://lodash.com/docs/4.17.15#isElement) | ❌ |
| [isEmpty](https://lodash.com/docs/4.17.15#isEmpty) | ❌ |
| [isEqual](https://lodash.com/docs/4.17.15#isEqual) | ✅ |
| [isEqualWith](https://lodash.com/docs/4.17.15#isEqualWith) | ❌ |
| [isError](https://lodash.com/docs/4.17.15#isError) | ❌ |
| [isFinite](https://lodash.com/docs/4.17.15#isFinite) | ❌ |
| [isFunction](https://lodash.com/docs/4.17.15#isFunction) | ✅ |
| [isInteger](https://lodash.com/docs/4.17.15#isInteger) | ❌ |
| [isLength](https://lodash.com/docs/4.17.15#isLength) | ✅ |
| [isMap](https://lodash.com/docs/4.17.15#isMap) | ❌ |
| [isMatch](https://lodash.com/docs/4.17.15#isMatch) | ✅ |
| [isMatchWith](https://lodash.com/docs/4.17.15#isMatchWith) | ❌ |
| [isNaN](https://lodash.com/docs/4.17.15#isNaN) | ❌ |
| [isNative](https://lodash.com/docs/4.17.15#isNative) | ❌ |
| [isNil](https://lodash.com/docs/4.17.15#isNil) | 📝 |
| [isNull](https://lodash.com/docs/4.17.15#isNull) | ✅ |
| [isNumber](https://lodash.com/docs/4.17.15#isNumber) | ❌ |
| [isObject](https://lodash.com/docs/4.17.15#isObject) | ❌ |
| [isObjectLike](https://lodash.com/docs/4.17.15#isObjectLike) | ✅ |
| [isPlainObject](https://lodash.com/docs/4.17.15#isPlainObject) | ✅ |
| [isRegExp](https://lodash.com/docs/4.17.15#isRegExp) | ✅ |
| [isSafeInteger](https://lodash.com/docs/4.17.15#isSafeInteger) | ❌ |
| [isSet](https://lodash.com/docs/4.17.15#isSet) | ❌ |
| [isString](https://lodash.com/docs/4.17.15#isString) | ✅ |
| [isSymbol](https://lodash.com/docs/4.17.15#isSymbol) | ✅ |
| [isTypedArray](https://lodash.com/docs/4.17.15#isTypedArray) | ✅ |
| [isUndefined](https://lodash.com/docs/4.17.15#isUndefined) | ✅ |
| [isWeakMap](https://lodash.com/docs/4.17.15#isWeakMap) | ❌ |
| [isWeakSet](https://lodash.com/docs/4.17.15#isWeakSet) | ❌ |
| [lt](https://lodash.com/docs/4.17.15#lt) | ❌ |
| [lte](https://lodash.com/docs/4.17.15#lte) | ❌ |
| [toArray](https://lodash.com/docs/4.17.15#toArray) | ❌ |
| [toFinite](https://lodash.com/docs/4.17.15#toFinite) | ❌ |
| [toInteger](https://lodash.com/docs/4.17.15#toInteger) | ❌ |
| [toLength](https://lodash.com/docs/4.17.15#toLength) | ❌ |
| [toNumber](https://lodash.com/docs/4.17.15#toNumber) | ❌ |
| [toPlainObject](https://lodash.com/docs/4.17.15#toPlainObject) | ❌ |
| [toSafeInteger](https://lodash.com/docs/4.17.15#toSafeInteger) | ❌ |
| [toString](https://lodash.com/docs/4.17.15#toString) | ❌ |
### "Math" メソッド
| Function Name | Implementation Status |
| ---------------------------------------------------- | --------------------- |
| [add](https://lodash.com/docs/4.17.15#add) | ❌ |
| [ceil](https://lodash.com/docs/4.17.15#ceil) | ❌ |
| [divide](https://lodash.com/docs/4.17.15#divide) | ❌ |
| [floor](https://lodash.com/docs/4.17.15#floor) | ❌ |
| [max](https://lodash.com/docs/4.17.15#max) | ✅ |
| [maxBy](https://lodash.com/docs/4.17.15#maxBy) | 📝 |
| [mean](https://lodash.com/docs/4.17.15#mean) | 📝 |
| [meanBy](https://lodash.com/docs/4.17.15#meanBy) | 📝 |
| [min](https://lodash.com/docs/4.17.15#min) | ✅ |
| [minBy](https://lodash.com/docs/4.17.15#minBy) | 📝 |
| [multiply](https://lodash.com/docs/4.17.15#multiply) | ❌ |
| [round](https://lodash.com/docs/4.17.15#round) | ❌ |
| [subtract](https://lodash.com/docs/4.17.15#subtract) | ❌ |
| [sum](https://lodash.com/docs/4.17.15#sum) | 📝 |
| [sumBy](https://lodash.com/docs/4.17.15#sumBy) | ❌ |
### "Number" メソッド
| Function Name | Implementation Status |
| -------------------------------------------------- | --------------------- |
| [clamp](https://lodash.com/docs/4.17.15#clamp) | 📝 |
| [inRange](https://lodash.com/docs/4.17.15#inRange) | 📝 |
| [random](https://lodash.com/docs/4.17.15#random) | 📝 |
### "Object" メソッド
| Function Name | Implementation Status |
| ------------------------------------------------------------ | --------------------- |
| [assign](https://lodash.com/docs/4.17.15#assign) | ❌ |
| [assignIn](https://lodash.com/docs/4.17.15#assignIn) | ❌ |
| [assignInWith](https://lodash.com/docs/4.17.15#assignInWith) | ❌ |
| [assignWith](https://lodash.com/docs/4.17.15#assignWith) | ❌ |
| [at](https://lodash.com/docs/4.17.15#at) | ❌ |
| [create](https://lodash.com/docs/4.17.15#create) | ❌ |
| [defaults](https://lodash.com/docs/4.17.15#defaults) | ❌ |
| [defaultsDeep](https://lodash.com/docs/4.17.15#defaultsDeep) | ❌ |
| [findKey](https://lodash.com/docs/4.17.15#findKey) | ❌ |
| [findLastKey](https://lodash.com/docs/4.17.15#findLastKey) | ❌ |
| [forIn](https://lodash.com/docs/4.17.15#forIn) | ❌ |
| [forInRight](https://lodash.com/docs/4.17.15#forInRight) | ❌ |
| [forOwn](https://lodash.com/docs/4.17.15#forOwn) | ❌ |
| [forOwnRight](https://lodash.com/docs/4.17.15#forOwnRight) | ❌ |
| [functions](https://lodash.com/docs/4.17.15#functions) | ❌ |
| [functionsIn](https://lodash.com/docs/4.17.15#functionsIn) | ❌ |
| [get](https://lodash.com/docs/4.17.15#get) | ✅ |
| [has](https://lodash.com/docs/4.17.15#has) | ✅ |
| [hasIn](https://lodash.com/docs/4.17.15#hasIn) | ❌ |
| [invert](https://lodash.com/docs/4.17.15#invert) | ✅ |
| [invertBy](https://lodash.com/docs/4.17.15#invertBy) | ❌ |
| [invoke](https://lodash.com/docs/4.17.15#invoke) | ❌ |
| [keys](https://lodash.com/docs/4.17.15#keys) | ❌ |
| [keysIn](https://lodash.com/docs/4.17.15#keysIn) | ❌ |
| [mapKeys](https://lodash.com/docs/4.17.15#mapKeys) | ✅ |
| [mapValues](https://lodash.com/docs/4.17.15#mapValues) | ✅ |
| [merge](https://lodash.com/docs/4.17.15#merge) | ✅ |
| [mergeWith](https://lodash.com/docs/4.17.15#mergeWith) | ✅ |
| [omit](https://lodash.com/docs/4.17.15#omit) | 📝 |
| [omitBy](https://lodash.com/docs/4.17.15#omitBy) | 📝 |
| [pick](https://lodash.com/docs/4.17.15#pick) | 📝 |
| [pickBy](https://lodash.com/docs/4.17.15#pickBy) | 📝 |
| [result](https://lodash.com/docs/4.17.15#result) | ❌ |
| [set](https://lodash.com/docs/4.17.15#set) | ✅ |
| [setWith](https://lodash.com/docs/4.17.15#setWith) | ❌ |
| [toPairs](https://lodash.com/docs/4.17.15#toPairs) | ❌ |
| [toPairsIn](https://lodash.com/docs/4.17.15#toPairsIn) | ❌ |
| [transform](https://lodash.com/docs/4.17.15#transform) | ❌ |
| [unset](https://lodash.com/docs/4.17.15#unset) | ❌ |
| [update](https://lodash.com/docs/4.17.15#update) | ❌ |
| [updateWith](https://lodash.com/docs/4.17.15#updateWith) | ❌ |
| [values](https://lodash.com/docs/4.17.15#values) | ❌ |
| [valuesIn](https://lodash.com/docs/4.17.15#valuesIn) | ❌ |
### "String" メソッド
| Function Name | Implementation Status |
| ------------------------------------------------------------ | --------------------- |
| [camelCase](https://lodash.com/docs/4.17.15#camelCase) | 📝 |
| [capitalize](https://lodash.com/docs/4.17.15#capitalize) | 📝 |
| [deburr](https://lodash.com/docs/4.17.15#deburr) | ❌ |
| [endsWith](https://lodash.com/docs/4.17.15#endsWith) | ✅ |
| [escape](https://lodash.com/docs/4.17.15#escape) | ❌ |
| [escapeRegExp](https://lodash.com/docs/4.17.15#escapeRegExp) | ❌ |
| [kebabCase](https://lodash.com/docs/4.17.15#kebabCase) | 📝 |
| [lowerCase](https://lodash.com/docs/4.17.15#lowerCase) | 📝 |
| [lowerFirst](https://lodash.com/docs/4.17.15#lowerFirst) | ✅ |
| [pad](https://lodash.com/docs/4.17.15#pad) | ❌ |
| [padEnd](https://lodash.com/docs/4.17.15#padEnd) | ❌ |
| [padStart](https://lodash.com/docs/4.17.15#padStart) | ❌ |
| [parseInt](https://lodash.com/docs/4.17.15#parseInt) | ❌ |
| [repeat](https://lodash.com/docs/4.17.15#repeat) | ❌ |
| [replace](https://lodash.com/docs/4.17.15#replace) | ❌ |
| [snakeCase](https://lodash.com/docs/4.17.15#snakeCase) | 📝 |
| [split](https://lodash.com/docs/4.17.15#split) | ❌ |
| [startCase](https://lodash.com/docs/4.17.15#startCase) | ❌ |
| [startsWith](https://lodash.com/docs/4.17.15#startsWith) | ✅ |
| [template](https://lodash.com/docs/4.17.15#template) | ❌ |
| [toLower](https://lodash.com/docs/4.17.15#toLower) | ❌ |
| [toUpper](https://lodash.com/docs/4.17.15#toUpper) | ❌ |
| [trim](https://lodash.com/docs/4.17.15#trim) | ❌ |
| [trimEnd](https://lodash.com/docs/4.17.15#trimEnd) | ❌ |
| [trimStart](https://lodash.com/docs/4.17.15#trimStart) | ❌ |
| [truncate](https://lodash.com/docs/4.17.15#truncate) | ❌ |
| [unescape](https://lodash.com/docs/4.17.15#unescape) | ❌ |
| [upperCase](https://lodash.com/docs/4.17.15#upperCase) | 📝 |
| [upperFirst](https://lodash.com/docs/4.17.15#upperFirst) | ✅ |
| [words](https://lodash.com/docs/4.17.15#words) | ❌ |
### "Util" メソッド
| Function Name | Implementation Status |
| ------------------------------------------------------------------ | --------------------- |
| [attempt](https://lodash.com/docs/4.17.15#attempt) | ❌ |
| [bindAll](https://lodash.com/docs/4.17.15#bindAll) | ❌ |
| [cond](https://lodash.com/docs/4.17.15#cond) | ❌ |
| [confirms](https://lodash.com/docs/4.17.15#confirms) | ❌ |
| [constant](https://lodash.com/docs/4.17.15#constant) | ❌ |
| [defaultTo](https://lodash.com/docs/4.17.15#defaultTo) | ❌ |
| [flow](https://lodash.com/docs/4.17.15#flow) | ❌ |
| [flowRight](https://lodash.com/docs/4.17.15#flowRight) | ❌ |
| [identity](https://lodash.com/docs/4.17.15#identity) | 📝 |
| [iteratee](https://lodash.com/docs/4.17.15#iteratee) | ❌ |
| [matches](https://lodash.com/docs/4.17.15#matches) | ✅ |
| [matchesProperty](https://lodash.com/docs/4.17.15#matchesProperty) | ✅ |
| [method](https://lodash.com/docs/4.17.15#method) | ❌ |
| [methodOf](https://lodash.com/docs/4.17.15#methodOf) | ❌ |
| [mixin](https://lodash.com/docs/4.17.15#mixin) | No support |
| [noConflict](https://lodash.com/docs/4.17.15#noConflict) | No support |
| [noop](https://lodash.com/docs/4.17.15#noop) | ❌ |
| [nthArg](https://lodash.com/docs/4.17.15#nthArg) | ❌ |
| [over](https://lodash.com/docs/4.17.15#over) | ❌ |
| [overEvery](https://lodash.com/docs/4.17.15#overEvery) | ❌ |
| [overSome](https://lodash.com/docs/4.17.15#overSome) | ❌ |
| [property](https://lodash.com/docs/4.17.15#property) | ✅ |
| [propertyOf](https://lodash.com/docs/4.17.15#propertyOf) | ❌ |
| [range](https://lodash.com/docs/4.17.15#range) | 📝 |
| [rangeRight](https://lodash.com/docs/4.17.15#rangeRight) | 📝 |
| [runInContext](https://lodash.com/docs/4.17.15#runInContext) | No support |
| [stubArray](https://lodash.com/docs/4.17.15#stubArray) | ❌ |
| [stubFalse](https://lodash.com/docs/4.17.15#stubFalse) | ❌ |
| [stubObject](https://lodash.com/docs/4.17.15#stubObject) | ❌ |
| [stubString](https://lodash.com/docs/4.17.15#stubString) | ❌ |
| [stubTrue](https://lodash.com/docs/4.17.15#stubTrue) | ❌ |
| [times](https://lodash.com/docs/4.17.15#times) | ❌ |
| [toPath](https://lodash.com/docs/4.17.15#toPath) | ❌ |
| [uniqueId](https://lodash.com/docs/4.17.15#uniqueId) | ❌ |

33
docs/ja/index.md Normal file
View File

@ -0,0 +1,33 @@
---
# https://vitepress.dev/reference/default-theme-home-page
layout: home
hero:
name: 'es-toolkit'
text: '最先端のJavaScriptユーティリティライブラリ'
# tagline:
actions:
- theme: brand
text: es-toolkitを知る
link: /ja/intro
- theme: alt
text: リファレンス
link: /ja/reference/array/chunk
- theme: alt
text: インストールと使用方法
link: /ja/usage
features:
- title: 高速なパフォーマンス
details: 同様の機能を提供する他のライブラリと比較して、平均2-3倍高速な実行時パフォーマンスを提供します。
- title: 小さなバンドルサイズ
details: 同等の機能を持つ関数を基準に、最大97%小さなJavaScriptサイズを実現しています。
- title: モダンな実装
details: 最新のJavaScript APIを使用しているため、実装が直感的でシンプルです。
- title: 堅牢な型定義
details: すべての関数に対してシンプルながら堅牢な型定義を提供しています。
- title: テストカバレッジ100%
details: すべての関数とブランチに対して、綿密なテストが作成されています。
- title: あらゆる環境で使用可能
details: Node.js、Deno、Bun、そしてブラウザまで、幅広いJavaScript環境をサポートしています。
---

25
docs/ja/intro.md Normal file
View File

@ -0,0 +1,25 @@
# es-toolkitの紹介
es-toolkitは、日常的な開発で使用する様々な関数を集めた最先端のJavaScriptユーティリティライブラリです。
[lodash](https://lodash.com/)のような他のライブラリと比較して、es-toolkitは[同じ関数基準で最大97%小さいバンドルサイズ](./bundle-size.md)を提供し、[2〜3倍高速に](./performance.md)動作します。最新のJavaScript APIを活用して現代的に実装したおかげです。
es-toolkitは堅固なTypeScriptタイプを内蔵して提供し、信頼性を高めるために100%テストカバレッジを目指しています。
## 提供する機能
es-toolkitが提供する機能リストは以下の通りです
- **Array**: 配列操作のためのユーティリティ、例えば [uniq](./reference/array/uniq.md) や [difference](./reference/array/difference.md) など。
- **Function**: 関数の実行を制御するためのツール、例えば [debounce](./reference/function/debounce.md) や [throttle](./reference/function/throttle.md) など。
- **Math**: 数値操作のためのユーティリティ、例えば [sum](./reference/math/sum.md) や [round](./reference/math/round.md) など。
- **Object**: JavaScriptオブジェクトを操作するためのツール、例えば [pick](./reference/object/pick.md) や [omit](./reference/object/omit.md) など。
- **Predicate**: 型ガード関数、例えば [isNotNil](./reference/predicate/isNotNil.md) など。
- **Promise**: 非同期操作のためのユーティリティ、例えば [delay](./reference/promise/delay.md) など。
- **String**: 文字列操作のためのユーティリティ、例えば [snakeCase](./reference/string/snakeCase.md) など。
## リンク
このプロジェクトについてより多くの情報を得るには、以下のリンクを参照してください:
- [GitHub](https://github.com/toss/es-toolkit)

26
docs/ja/performance.md Normal file
View File

@ -0,0 +1,26 @@
---
description: es-toolkitと他のライブラリのパフォーマンスの違い
---
# パフォーマンス
![es-toolkitとlodashのパフォーマンスの違いを示すグラフ。es-toolkitを使用すると、最大11倍のパフォーマンス向上が得られます。](/assets/performance.png)
パフォーマンスを重視して設計されたes-toolkitは、lodashのような他のライブラリと比較して平均2倍のパフォーマンス向上を提供します。いくつかの関数は、最新のJavaScript APIを完全に活用することで、最大11倍のパフォーマンス向上を達成します。
## パフォーマンス比較
| | es-toolkit@0.0.1 | lodash-es@4.17.21 | Difference |
| --------------------------------------------------------- | ---------------- | ----------------- | ---------- |
| [omit](./reference/object/omit.md) | 4,767,360 times | 403,624 times | 11.8× |
| [pick](./reference/object/pick.md) | 9,121,839 times | 2,663,072 times | 3.43× |
| [differenceWith](./reference/array/differenceWith.md) | 9,291,897 times | 4,275,222 times | 2.17× |
| [difference](./reference/array/difference.md) | 10,436,101 times | 5,155,631 times | 2.02× |
| [intersectionWith](./reference/array/intersectionWith.md) | 8,074,722 times | 3,814,479 times | 2.12× |
| [intersection](./reference/array/intersection.md) | 9,999,571 times | 4,630,316 times | 2.15× |
| [unionBy](./reference/array/unionBy.md) | 6,435,983 times | 3,794,899 times | 1.69× |
| [union](./reference/array/union.md) | 5,059,209 times | 4,771,400 times | 1.06× |
| [dropRightWhile](./reference/array/dropRightWhile.md) | 7,529,559 times | 5,606,439 times | 1.34× |
| [groupBy](./reference/array/groupBy.md) | 5,000,235 times | 5,206,286 times | 0.96× |
テスト環境はMacBook Pro 14インチM1 Max、2021です。[ベンチマークコード](https://github.com/toss/es-toolkit/tree/main/benchmarks)を参照してください。

View File

@ -0,0 +1,72 @@
# chunk
配列を指定された長さの小さな配列に分割します。
入力として配列を受け取り、指定された長さに従って複数の小さな配列に分割します。
入力配列が均等に分割できない場合、最後の分割された配列に残りの要素が含まれます。
## インターフェース
```typescript
function chunk<T>(arr: T[], size: number): T[][];
```
### パラメータ
- `arr` (`T[]`): 小さな配列に分割する配列。
- `size` (`number`): 小さな配列の長さ。正の整数である必要があります。
### 戻り値
(`T[][]`): 最大長 `size` の小さな配列で構成される2次元配列を返します。
### エラー
`size` が正の整数でない場合、エラーをスローします。
## 例
```typescript
import { chunk } from 'es-toolkit/array';
// 数値の配列を最大長2の小さな配列に分割します。
chunk([1, 2, 3, 4, 5], 2);
// Returns: [[1, 2], [3, 4], [5]]
// 文字列の配列を最大長3の小さな配列に分割します。
chunk(['a', 'b', 'c', 'd', 'e', 'f', 'g'], 3);
// Returns: [['a', 'b', 'c'], ['d', 'e', 'f'], ['g']]
```
## 使用例
::: sandpack
```ts index.ts
import { chunk } from 'es-toolkit/array';
console.log(chunk([1, 2, 3, 4, 5], 2));
```
:::
## Lodash 互換性
`es-toolkit/compat` から `chunk` をインポートすると、Lodash と互換になります。
- `size` が 1 未満の場合、空の配列を返します。
- `size` に小数点のある数を提供しても、整数に切り捨てられます。
```typescript
import { chunk } from 'es-toolkit/compat';
chunk([1, 2, 3], 0); // Returns []
```
## 性能比較
| | [Bundle Size](../../bundle-size.md) | [Performance](../../performance.md) |
| ----------------- | ----------------------------------- | ----------------------------------- |
| es-toolkit | 238 bytes (92.4% smaller) | 9,338,821 times (11% slower) |
| es-toolkit/compat | 307 bytes (90.2% smaller) | 9,892,157 times (5% slower) |
| lodash-es | 3,153 bytes | 10,523,270 times |

View File

@ -0,0 +1,24 @@
# compact
偽と評価される値である `false`、`null`、`0`、`''`、`undefined`、`NaN` を除去した新しい配列を返します。
## インターフェース
```typescript
function compact<T>(arr: T[]): Array<Exclude<T, false | null | 0 | '' | undefined>>;
```
### パラメータ
- `arr` (`T[]`): 偽と評価される値を除去する配列。
### 戻り値
(`Array<Exclude<T, false | null | 0 | '' | undefined>>`): 偽と評価される値をすべて除去した新しい配列。
## 例
```typescript
compact([0, 1, false, 2, '', 3, null, undefined, 4, NaN, 5]);
// 戻り値: [1, 2, 3, 4, 5]
```

View File

@ -0,0 +1,30 @@
# countBy
配列に含まれる要素を `mapper` 関数が返す値に基づいて分類し、数を数えます。
## インターフェース
```typescript
function countBy<T>(arr: T[], mapper: (item: T) => string): Record<string, number>;
```
### パラメータ
- `arr` (`T[]`): 要素の数を数えたい配列。
- `mapper` (`(item: T) => string`): 要素を分類する基準となる値を返す関数。
### 戻り値
(`Record<string, number>`) 各要素が分類ごとにいくつあるかを計算したオブジェクト。
## 例
```javascript
import { countBy } from 'es-toolkit/array';
const array = [1, 2, 3, 4, 5, 6];
const result = countBy(array, x => (x % 2 === 0 ? 'even' : 'odd'));
console.log(result);
// 出力: { 'odd': 3, 'even': 3 }
```

View File

@ -0,0 +1,40 @@
# difference
2つの配列の差分を計算します。
この関数は2つの配列をパラメータとして受け取り、最初の配列にあるが2番目の配列にない要素を含む新しい配列を返します。
つまり、最初の配列から2番目の配列にある要素を除いた残りの要素で構成される配列を作成します。
## インターフェース
```typescript
function difference<T>(firstArr: T[], secondArr: T[]): T[];
```
### パラメータ
- `firstArr` (`T[]`): 差分を計算する配列です。この配列が主な配列で、この配列の要素が比較されフィルタリングされます。
- `secondArr` (`T[]`): 最初の配列から除外する要素を含む配列です。この配列の各要素は最初の配列と比較され、一致する要素があれば結果から除外されます。
### 戻り値
(`T[]`): 最初の配列にはあるが2番目の配列にはない要素が含まれる新しい配列です。
## 例
```typescript
import { difference } from 'es-toolkit/array';
// 使用例:
const array1 = [1, 2, 3, 4, 5];
const array2 = [2, 4];
const result = difference(array1, array2);
// 2と4は両方の配列に存在するため結果から除外され、result変数には[1, 3, 5]が割り当てられます。
```
## パフォーマンス比較
| | [Bundle Size](../../bundle-size.md) | [Performance](../../performance.md) |
| ---------- | ----------------------------------- | ----------------------------------- |
| es-toolkit | 90 bytes (92.4% smaller) | 9,317,227 times (85% faster) |
| lodash-es | 7,958 bytes | 5,030,861 times |

View File

@ -0,0 +1,33 @@
# differenceBy
提供された関数で要素をマッピングした後、2つの配列の差分を計算します。
この関数は2つの配列とマッパー関数を受け取り、マッパー関数で計算された結果を基準に、最初の配列にあるが2番目の配列にはない要素を含む新しい配列を返します。つまり、マッピングされた値が2番目の配列のマッピングされた値と一致する最初の配列の要素を除いた残りの要素で構成される配列を作成します。
## インターフェース
```typescript
function differenceBy<T, U>(firstArr: T[], secondArr: T[], mapper: (value: T) => U): T[];
```
### パラメータ
- `firstArr` (`T[]`): 差分を計算する配列です。この配列が主な配列で、この配列の要素が比較されフィルタリングされます。
- `secondArr` (`T[]`): 最初の配列から除外する要素を含む配列です。
- `mapper` (`(value: T) => U`): 2つの配列の要素をマッピングする関数です。この関数は2つの配列の各要素に適用され、マッピングされた値を基準に比較を行います。
### 戻り値
(`T[]`): 最初の配列にはあるが、マッピングされた値が2番目の配列のマッピングされた値と一致しない要素が含まれる新しい配列です。
## 例
```typescript
import { differenceBy } from 'es-toolkit/array';
const array1 = [{ id: 1 }, { id: 2 }, { id: 3 }, { id: 4 }, { id: 5 }];
const array2 = [{ id: 2 }, { id: 4 }];
const mapper = item => item.id;
const result = differenceBy(array1, array2, mapper);
// resultは[{ id: 1 }, { id: 3 }, { id: 5 }]になります。idが2の要素は両方の配列に存在するため、結果から除外されます。
```

View File

@ -0,0 +1,33 @@
# differenceWith
引数として提供された比較関数に従って、2つの配列の差分を計算します。
この関数は2つの配列と比較関数を受け取ります。この比較関数を使用して要素が同じかどうかを比較し、最初の配列にあるが2番目の配列にはない要素を含む新しい配列を返します。
## インターフェース
```typescript
function differenceWith<T>(firstArr: T[], secondArr: T[], areItemsEqual: (x: T, y: T) => boolean): T[];
```
### パラメータ
- `firstArr` (`T[]`): 差分を計算する配列です。この配列が主な配列で、この配列の要素が比較されフィルタリングされます。
- `secondArr` (`T[]`): 最初の配列から除外する要素を含む配列です。
- `areItemsEqual` (`(x: T, y: T) => boolean`): 2つの要素が同じかどうかを決定する関数です。
### 戻り値
(`T[]`) 比較関数に基づいて、最初の配列にはあるが2番目の配列には存在しないと判断された要素を含む新しい配列です。
## 例
```typescript
import { differenceWith } from 'es-toolkit/array';
const array1 = [{ id: 1 }, { id: 2 }, { id: 3 }];
const array2 = [{ id: 2 }, { id: 4 }];
const areItemsEqual = (a, b) => a.id === b.id;
const result = differenceWith(array1, array2, areItemsEqual);
// resultは[{ id: 1 }, { id: 3 }]になります。idが2の要素は同じと見なされ、結果から除外されます。
```

View File

@ -0,0 +1,28 @@
# drop
配列の先頭から指定した数の要素を削除した新しい配列を返します。
この関数は、配列と数値をパラメータとして受け取ります。配列の先頭から指定した数の要素を除いた新しい配列を返します。
## インターフェース
```typescript
function drop<T>(arr: T[], itemsCount: number): T[];
```
### パラメータ
- `arr` (`T[]`): 要素を削除する配列。
- `itemsCount` (`number`): 配列の先頭から削除する要素の数。
### 戻り値
(`T[]`): 配列の先頭から指定した数の要素を除いた新しい配列を返します。
## 例
```typescript
const array = [1, 2, 3, 4, 5];
const result = drop(array, 2);
// 最初の2つの要素が削除されるので、結果は [3, 4, 5] になります。
```

View File

@ -0,0 +1,28 @@
# dropRight
配列の末尾から指定された数の要素を削除した新しい配列を返します。
この関数は、配列と数値をパラメータとして受け取ります。配列の末尾から指定された数の要素を除いた新しい配列を返します。
## インターフェース
```typescript
function dropRight<T>(arr: T[], itemsCount: number): T[];
```
### パラメータ
- `arr` (`T[]`): 要素を削除する対象の配列。
- `itemsCount` (`number`): 配列の末尾から削除する要素の数。
### 戻り値
(`T[]`): 配列の末尾から指定された数の要素を除いた新しい配列を返します。
## 例
```typescript
const array = [1, 2, 3, 4, 5];
const result = dropRight(array, 2);
// 末尾の2つの要素が削除されるので、結果は [1, 2, 3] になります。
```

View File

@ -0,0 +1,29 @@
# dropRightWhile
配列の末尾から始めて、条件関数が`false`を返すまで要素を削除します。
この関数は配列の各要素を走査し、配列の末尾から条件関数が`false`を返すまで要素を削除します。
残りの要素で構成される新しい配列を返します。
## インターフェース
```typescript
function dropRightWhile<T>(arr: T[], canContinueDropping: (item: T) => boolean): T[];
```
### パラメータ
- `arr` (`T[]`): 要素を削除する配列。
- `canContinueDropping` (`(item: T) => boolean`): 要素の削除を続けるかどうかを返す条件関数です。各要素に対して呼び出され、`true`を返す間は要素を削除します。
### 戻り値
(`T[]`): 条件関数が`false`を返すまでの残りの要素で構成される新しい配列。
## 例
```typescript
const array = [1, 2, 3, 2, 4, 5];
const result = dropRightWhile(array, x => x > 3);
// 3以下の要素に遭遇するまで要素を削除するので、結果は[1, 2, 3, 2]になります。
```

View File

@ -0,0 +1,29 @@
# dropWhile
配列の先頭から始めて、条件関数が`false`を返すまで要素を削除します。
この関数は配列の各要素を順に処理し、配列の先頭から条件関数が`false`を返すまで要素を削除します。
残りの要素で構成される新しい配列を返します。
## インターフェース
```typescript
function dropWhile<T>(arr: T[], canContinueDropping: (item: T) => boolean): T[];
```
### パラメータ
- `arr` (`T[]`): 要素を削除する配列。
- `canContinueDropping` (`(item: T) => boolean`): 要素の削除を続けるかどうかを返す条件関数です。各要素に対して呼び出され、`true`を返す間は要素を削除します。
### 戻り値
(`T[]`): 条件関数が`false`を返すまでの残りの要素で構成される新しい配列。
## 例
```typescript
const array = [1, 2, 3, 2, 4, 5];
const result = dropWhile(array, x => x < 3);
// 3未満の要素が見つかるまで要素を削除するので、結果は[3, 2, 4, 5]になります。
```

View File

@ -0,0 +1,47 @@
# fill
配列の要素を指定された値で埋めます。開始位置から終了位置までの要素を提供された値で置き換えます。
この関数は元の配列を変更し、提供された値で開始インデックスから終了インデックスまでの要素を置き換えます。
開始または終了インデックスを提供しない場合、配列全体を埋めます。
負のインデックスを使用することもできます。この場合、配列の末尾からインデックスを計算します。
## インターフェース
```typescript
function fill<T>(array: unknown[], value: T): T[];
function fill<T, U>(array: T[], value: T, start: number): Array<T | U>;
function fill<T, U>(array: T[], value: T, start: number, end: number): Array<T | U>;
```
### パラメータ
- `array` (`Array<T | U>`): 埋める配列です。
- `value` (`U`): 配列を埋める値です。
- `start` (`number`, デフォルト = 0): 開始位置です。デフォルトは0です。
- `end` (`number`, デフォルト = array.length): 終了位置です。デフォルトは配列の長さです。
### 戻り値
(`Array<T | U>`): 埋められた値がある配列を返します。
## 例
```typescript
const array1 = [1, 2, 3];
const result1 = fill(array1, 'a');
// result1は ['a', 'a', 'a'] になります。
const array2 = Array(3);
const result2 = fill(array2, 2);
// result2は [2, 2, 2] になります。
const array3 = [4, 6, 8, 10];
const result3 = fill(array3, '*', 1, 3);
// result3は [4, '*', '*', 10] になります。
const array4 = [1, 2, 3];
const result4 = fill(array4, '*', -2, -1);
// result4は [1, '*', 3] になります。
```

View File

@ -0,0 +1,36 @@
# flatMap
ネストされた配列の各要素を与えられたイテレータ関数でマッピングし、指定された深さまで平坦化します。
JavaScriptに組み込まれている[Array#flat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat)を[Array#map](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/map)と組み合わせて`map(iteratee).flat(depth)`として呼び出した場合と同じように動作しますが、より高速です。
## インターフェース
```typescript
function flatMap<T, U, D extends number = 1>(arr: T[], iteratee: (item: T) => U, depth?: D): Array<FlatArray<U[], D>>;
```
### パラメータ
- `arr` (`T[]`): 平坦化するネストされた配列です。
- `iteratee` (`T[]`): 各配列要素をマッピングする関数です。
- `depth` (`D`): 平坦化する深さです。デフォルト値は1です。
### 戻り値
(`Array<FlatArray<U[], D>>`): 各要素がマッピングされ、指定された深さまで平坦化された新しい配列です。
## 例
```typescript
const array = [1, 2, 3];
const result1 = flatMap(array, item => [item, item], 1);
// [1, 1, 2, 2, 3, 3]を返します。
const result2 = flatMap(array, item => [[item, item]], 2);
// [1, 1, 2, 2, 3, 3]を返します。
const result3 = flatMap(array, item => [[[item, item]]], 3);
// [1, 1, 2, 2, 3, 3]を返します。
```

View File

@ -0,0 +1,35 @@
# flatten
ネストされた配列を指定した深さまで平坦化します。
JavaScriptに組み込まれている[Array#flat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat)と同じように動作しますが、より高速です。
## インターフェース
```typescript
function flatten<T, D extends number = 1>(arr: T[], depth?: D): Array<FlatArray<T[], D>>;
```
### パラメータ
- `arr` (`T[]`): 平坦化する入れ子の配列です。
- `depth` (`D`): 平坦化する深さです。デフォルト値は1です。
### 戻り値
(`Array<FlatArray<T[], D>>`): 指定された深さまで平坦化された新しい配列です。
## 例
```typescript
const array = [1, [2, 3], [4, [5, 6]]];
const result1 = flatten(array);
// [1, 2, 3, 4, [5, 6]]を返します。
const result2 = flatten(array, 1);
// [1, 2, 3, 4, [5, 6]]を返します。
const result3 = flatten(array, 2);
// [1, 2, 3, 4, 5, 6]を返します。
```

View File

@ -0,0 +1,31 @@
# flattenDeep
ネストされた配列のすべての深さを展開して平坦化します。
JavaScript言語に含まれる[Array#flat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat)を`flat(Infinity)`で呼び出した時と同じように動作しますが、より高速です。
## インターフェース
```typescript
// ネストされた配列を再帰的に展開して、最も内部の要素の型を抽出するユーティリティ型です。
type ExtractNestedArrayType<T> = T extends ReadonlyArray<infer U> ? ExtractNestedArrayType<U> : T;
function flattenDeep<T>(arr: T[]): Array<ExtractNestedArrayType<T>>;
```
### パラメータ
- `arr` (`T[]`): 平坦化するネストされた配列です。
### 戻り値
(`Array<ExtractNestedArrayType<T>>`): すべての深さが平坦化された新しい配列です。
## 例
```typescript
const array = [1, [2, [3]], [4, [5, 6]]];
const result = flattenDeep(array);
// [1, 2, 3, 4, 5, 6]を返します。
```

View File

@ -0,0 +1,37 @@
# forEachRight
配列 (`arr`) の要素を右から左に順に走査し、各要素に対して `callback` 関数を呼び出します。
## インターフェース
```ts
function forEachRight<T>(arr: T[], callback: (value: T, index: number, arr: T[]) => void): void;
```
### パラメータ
- `arr`: (`T[]`): 走査する配列。
- `callback`: (`(value: T, index: number, arr: T[])`): 各反復で呼び出される関数です。
- `value`: 配列内で現在処理中の要素。
- `index`: 配列内で現在処理中の要素のインデックス。
- `arr`: `forEachRight` 関数が呼び出された配列。
### 戻り値
`void`
## 例
```ts
import { forEachRight } from 'es-toolkit/forEachRight';
const array = [1, 2, 3];
const result: number[] = [];
// forEachRight 関数を使用して配列を走査し、各要素を結果配列に追加します。
forEachRight(array, value => {
result.push(value);
});
console.log(result); // 出力: [3, 2, 1];
```

View File

@ -0,0 +1,42 @@
# groupBy
与えられたキー生成関数に従って配列の要素を分類します。
この関数は、配列と各要素からキーを生成する関数をパラメータとして受け取ります。
キーは関数で生成されたキーであり、値はそのキーを共有する要素をグループ化した配列であるオブジェクトを返します。
## インターフェース
```typescript
function groupBy<T, K extends PropertyKey>(arr: T[], getKeyFromItem: (item: T) => K): Record<K, T[]>;
```
### パラメータ
- `arr` (`T[]`): 要素を分類する配列。
- `getKeyFromItem` (`(item: T) => K`): 要素からキーを生成する関数。
### 戻り値
(`Record<K, T[]>`): キーに従って要素が分類されたオブジェクトを返します。
## 例
```typescript
const array = [
{ category: 'fruit', name: 'apple' },
{ category: 'fruit', name: 'banana' },
{ category: 'vegetable', name: 'carrot' },
];
const result = groupBy(array, item => item.category);
// 結果:
// {
// fruit: [
// { category: 'fruit', name: 'apple' },
// { category: 'fruit', name: 'banana' }
// ],
// vegetable: [
// { category: 'vegetable', name: 'carrot' }
// ]
// }
```

View File

@ -0,0 +1,44 @@
# head
配列の最初の要素を返します。
この関数は、配列を入力として受け取り、配列の最初の要素を返します。配列が空の場合、関数は`undefined`を返します。
## インターフェース
```typescript
export function head<T>(arr: [T, ...T[]]): T;
export function head<T>(arr: T[]): T | undefined;
```
### パラメータ
- `arr` (`T[]`): 最初の要素を取得する配列です。
### 戻り値
(`T | undefined`): 配列の最初の要素、配列が空の場合`undefined`を返します。
## 例
```typescript
const arr1 = [1, 2, 3];
const firstElement1 = head(arr1);
// firstElement1は1です。
const arr2: string[] = [];
const firstElement2 = head(arr2);
// firstElement2はundefinedです。
const arr3 = ['a', 'b', 'c'];
const firstElement3 = head(arr3);
// firstElement3は'a'です。
const arr4 = [true, false, true];
const firstElement4 = head(arr4);
// firstElement4はtrueです。
const arr5: [number, string, boolean] = [1, 'a', true];
const firstElement5 = head(arr5);
// firstElement5は1です。
```

View File

@ -0,0 +1,49 @@
# initial
配列の最後の要素を除いた残りの要素で構成される新しい配列を返します。
空の配列や長さが1の配列の場合、空の配列`[]`)を返します。
## インターフェース
```typescript
function initial<T>(arr: T[]): T[];
```
### パラメータ
- `arr``T[]`):最後の要素を除く配列。
### 戻り値
`T[]`配列の最後の要素を除いた残りの配列。空の配列や長さが1の配列の場合、空の配列`[]`)を返します。
## 例
```typescript
const arr1 = [1, 2, 3];
const result = initial(arr1);
// resultは[1, 2]です。
const arr2: number[] = [];
const result = initial(arr2);
// resultは[]です。
const arr3: number[] = [1];
const result = initial(arr3);
// resultは[]です。
const largeArray = Array(1000)
.fill(0)
.map((_, i) => i);
const result = initial(largeArray);
// resultは[0, 1, 2 ..., 998]です。
const nestedArray = [
[3, 1],
[3, 2],
[3, 3],
];
const result = initial(nestedArray);
// resultは[[3, 1], [3, 2]]です。
```

View File

@ -0,0 +1,30 @@
# intersection
両方の配列に含まれる要素を返します。
この関数は2つの配列を受け取り、両方の配列に含まれる要素で構成された新しい配列を返します。
実際には、最初の配列の要素のうち、2番目の配列に含まれていない要素を削除します。
## インターフェース
```typescript
function intersection<T>(firstArr: T[], secondArr: T[]): T[];
```
### パラメータ
- `firstArr` (`T[]`): 比較する1つ目の配列。
- `secondArr` (`T[]`): 比較する2つ目の配列。
### 戻り値
(`T[]`) 両方の配列に含まれる要素で構成された新しい配列。
## 例
```typescript
const array1 = [1, 2, 3, 4, 5];
const array2 = [3, 4, 5, 6, 7];
const result = intersection(array1, array2);
// 両方の配列に含まれる [3, 4, 5] を返します。
```

View File

@ -0,0 +1,33 @@
# intersectionBy
`mapper` 関数が返す値を基準に、2つの配列の共通部分を返します。
この関数は、パラメータとして2つの配列と `mapper` 関数を受け取ります。
`mapper` 関数で各配列の要素を変換したとき、両方の配列に含まれる要素からなる新しい配列を返します。
実際の実装を見ると、最初の配列と2番目の配列を `mapper` が返す値を基準に比較し、最初の配列の要素のうち2番目の配列にない要素を除去します。
## インターフェース
```typescript
function intersectionBy<T, U>(firstArr: T[], secondArr: T[], mapper: (item: T) => U): T[];
```
### パラメータ
- `firstArr` (`T[]`): 比較する最初の配列。
- `secondArr` (`T[]`): 比較する2番目の配列。
- `mapper` (`(item: T) => U`): 比較するために要素を新しい値に変換する関数。
### 戻り値
(`T[]`): 最初の配列と2番目の配列を `mapper` が返す値を基準に比較し、両方の配列に含まれる要素のみを含む新しい配列。
## 例
```typescript
const array1 = [{ id: 1 }, { id: 2 }, { id: 3 }];
const array2 = [{ id: 2 }, { id: 4 }];
const mapper = item => item.id;
const result = intersectionBy(array1, array2, mapper);
// `mapper`で変換したとき、両方の配列に含まれる要素からなる [{ id: 2 }] 値が返されます。
```

View File

@ -0,0 +1,33 @@
# intersectionWith
2つの要素が一致するかどうかを判断するカスタム関数を基準に、2つの配列の交差部分を返します。
この関数は、パラメータとして2つの配列とカスタム一致関数を受け取ります。
この関数は、カスタム一致関数の戻り値を基準に、両方の配列に含まれる要素を新しい配列として返します。
実際の実装を見ると、最初の配列の要素のうち、2番目の配列のどの要素とも一致関数の基準で等しくない要素を除外した新しい配列を返します。
## インターフェース
```typescript
function intersectionWith<T>(firstArr: T[], secondArr: T[], areItemsEqual: (x: T, y: T) => boolean): T[];
```
### パラメータ
- `firstArr` (`T[]`): 比較する最初の配列。
- `secondArr` (`T[]`): 比較する2番目の配列。
- `areItemsEqual` (`(x: T, y: T) => boolean`): 2つの要素が一致するかどうかを判断する一致関数です。2つの要素が一致する場合は `true` を、一致しない場合は `false` を返すようにしてください。
### 戻り値
(`T[]`): カスタム一致関数の戻り値を基準に、両方の配列に含まれる要素を含む新しい配列。
## 例
```typescript
const array1 = [{ id: 1 }, { id: 2 }, { id: 3 }];
const array2 = [{ id: 2 }, { id: 4 }];
const areItemsEqual = (a, b) => a.id === b.id;
const result = intersectionWith(array1, array2, areItemsEqual);
// `areItemsEqual` 基準でarray1とarray2の両方に含まれている要素からなる [{ id: 2 }] が返されます。
```

View File

@ -0,0 +1,33 @@
# isSubset
`subset` 配列が `superset` 配列のサブセットであるかどうかを確認します。
## インターフェース
```typescript
function isSubset<T>(superset: T[], subset: T[]): boolean;
```
### パラメータ
- `superset` (`T[]`): サブセットのすべての要素を含む可能性のある配列です。
- `subset` (`T[]`): スーパーセット配列に含まれているかどうかを比較する配列です。
### 戻り値
(`boolean`): `subset` 配列が `superset` 配列にすべて含まれている場合は `true` を返します。
## 例
```typescript
const superset1 = [1, 2, 3, 4, 5];
const subset1 = [2, 3, 4];
isSubset(superset1, subset1);
// true を返します。
const superset2 = ['a', 'b', 'c'];
const subset2 = ['a', 'd'];
isSubset(superset2, subset2);
// false を返します。
```

View File

@ -0,0 +1,38 @@
# keyBy
配列の要素を簡単に見つけられるように、キーと値のペアからなるオブジェクトに変換します。
この関数は、パラメータとして配列と各要素からキーを生成する関数を受け取ります。
キーは関数で生成されたキーであり、値はそのキーを生成した要素であるオブジェクトを返します。
同じキーを生成する要素が複数ある場合、その中で最後の要素が値として使用されます。
## インターフェース
```typescript
function keyBy<T, K extends PropertyKey>(arr: T[], getKeyFromItem: (item: T) => K): Record<K, T>;
```
### パラメータ
- `arr` (`T[]`): マッピングする配列。
- `getKeyFromItem` (`(item: T) => K`): 要素からキーを生成する関数。
### 戻り値
(`Record<K, T>`) キーと対応する配列要素がマッピングされたオブジェクトを返します。
## 例
```typescript
const array = [
{ category: 'fruit', name: 'apple' },
{ category: 'fruit', name: 'banana' },
{ category: 'vegetable', name: 'carrot' },
];
const result = keyBy(array, item => item.category);
// 結果:
// {
// fruit: { category: 'fruit', name: 'banana' },
// vegetable: { category: 'vegetable', name: 'carrot' }
// }
```

View File

@ -0,0 +1,46 @@
# last
配列の最後の要素を返します。
空の配列の場合、`undefined`を返します。
## インターフェース
```typescript
function last<T>(arr: [...T[], T]): T;
function last<T>(arr: T[]): T | undefined;
```
### パラメータ
- `arr`(`T[]`): 最後の要素を返す配列。
### 戻り値
(`T | undefined`): 配列の最後の要素、空の配列の場合は`undefined`を返します。
## 例
```typescript
const arr1 = [1, 2, 3];
const result = last(arr1);
// resultは3です。
const arr2: number[] = [];
const result = last(arr2);
// resultはundefinedです。
const largeArray = Array(1000)
.fill(0)
.map((_, i) => i);
const result = last(largeArray);
// resultは999です。
const nestedArray = [
[3, 1],
[3, 2],
[3, 3],
];
const result = last(nestedArray);
// resultは[3,3]です。
```

View File

@ -0,0 +1,27 @@
# maxBy
関数が返す値を基準に、配列の中で最大値を持つ要素を返します。
配列が空の場合は、`undefined`を返します。
## インターフェース
```typescript
function maxBy<T>(items: T[], getValue: (element: T) => number): T;
```
### パラメータ
- `items` (`T[]`): 最大値を持つ要素を探す配列。
- `getValue` (`(element: T) => number`): 要素に対応する数値を計算する関数。
### 戻り値
(`T`): `getValue`関数を基準に、配列の中で最大値を持つ要素。配列が空の場合は`undefined`を返します。
### 例
```typescript
maxBy([{ a: 1 }, { a: 2 }, { a: 3 }], x => x.a); // 戻り値: { a: 3 }
maxBy([], x => x.a); // 戻り値: undefined
```

View File

@ -0,0 +1,25 @@
# minBy
関数が返す値を基準に、配列から最小値を持つ要素を返します。
## インターフェース
```typescript
function minBy<T>(items: T[], getValue: (element: T) => number): T;
```
### パラメータ
- `items` (`T[]`): 最小値を持つ要素を探す配列。
- `getValue` (`(element: T) => number`): 要素に対応する数値を計算する関数。
### 戻り値
(`T`): `getValue` 関数を基準に、配列から最小値を持つ要素。
### 例
```typescript
minBy([{ a: 1 }, { a: 2 }, { a: 3 }], x => x.a); // 戻り値: { a: 1 }
minBy([], x => x.a); // 戻り値: undefined
```

View File

@ -0,0 +1,53 @@
# orderBy
複数のプロパティとそれぞれの順序方向に基づいてオブジェクトの配列をソートします。
与えられた条件 `criteria` と指定された順序方向に従って、オブジェクトの配列をソートします。
- 条件がプロパティ名の場合、対応するプロパティの値に基づいてソートします。
- 条件が関数の場合、関数が返す値に基づいてソートします。
配列は指定された順序に従って昇順(`asc`)または降順(`desc`)でソートされます。
条件に基づいて2つの要素の値が等しい場合、次の条件でソートします。
順序の数が条件の数より少ない場合、残りは最後の順序でソートされます。
## シグネチャ
```typescript
function orderBy<T extends object>(
arr: T[],
criteria: Array<((item: T) => unknown) | keyof T>,
orders: Array<'asc' | 'desc'>
): T[];
```
### パラメータ
- `arr` (`T[]`): ソートするオブジェクトの配列。
- `criteria` (`Array<((item: T) => unknown) | keyof T>`): ソートの基準。オブジェクトのプロパティ名または関数を使用できます。
- `orders` (`Array<'asc' | 'desc'>`): 各キーに対するソート方向の配列('asc'は昇順、'desc'は降順)。
### 戻り値
(`T[]`) ソートされた配列。
## 例
```typescript
// 'user'を昇順、'age'を降順でオブジェクトの配列をソートする。
const users = [
{ user: 'fred', age: 48 },
{ user: 'barney', age: 34 },
{ user: 'fred', age: 40 },
{ user: 'barney', age: 36 },
];
const result = orderBy(users, [obj => obj.user, 'age'], ['asc', 'desc']);
// result will be:
// [
// { user: 'barney', age: 36 },
// { user: 'barney', age: 34 },
// { user: 'fred', age: 48 },
// { user: 'fred', age: 40 },
// ]
```

View File

@ -0,0 +1,31 @@
# partition
配列を2つに分割するのに使用できる関数です。
この関数は、パラメータとして配列と`true`/`false`を返す関数を受け取ります。
この関数は2つの配列からなるタプルを返します。最初の配列は関数が`true`を返す要素で構成されます。
2番目の配列は関数が`false`を返す要素で構成されます。
## インターフェース
```typescript
function partition<T>(arr: T[], isInTruthy: (value: T) => boolean): [truthy: T[], falsy: T[]];
```
### パラメータ
- `arr` (`T[]`): 2つに分割する配列。
- `isInTruthy` (`(value: T) => boolean`): 配列の要素が最初の配列に含まれるか、2番目の配列に含まれるかを決定する関数。`true`を返すと最初の配列に、`false`を返すと2番目の配列に含まれます。
### 戻り値
(`[T[], T[]]`): 2つの配列で構成されるタプル。最初の配列は`isInTruthy`が`true`を返した要素で、2番目の配列は`false`を返した要素で構成されます。
## 例
```typescript
const array = [1, 2, 3, 4, 5];
const is偶数 = x => x % 2 === 0;
const [偶数, 奇数] = partition(array, is偶数);
// 偶数は[2, 4]、奇数は[1, 3, 5]になります。
```

View File

@ -0,0 +1,25 @@
# sample
配列を受け取り、その配列からランダムに選択された単一の要素を返します。
## インターフェース
```typescript
function sample<T>(arr: T[]): T;
```
### パラメータ
- `arr` (`T[]`): サンプリングする配列です。
### 戻り値
(`T`): 配列からランダムに選択された要素です。
## 例
```typescript
const array = [1, 2, 3, 4, 5];
const randomElement = sample(array);
// randomElementは配列からランダムに選択された要素の1つになります。
```

View File

@ -0,0 +1,32 @@
# sampleSize
指定された `size` のサンプル要素の配列を返します。
この関数は配列と数値を受け取ります。[Floydのアルゴリズム](https://www.nowherenearithaca.com/2013/05/robert-floyds-tiny-and-beautiful.html)を使用して、サンプリングされた要素を含む配列を返します。
## インターフェース
```typescript
export function sampleSize<T>(array: T[], size: number): T[];
```
### パラメータ
- `array` (`T[]`): サンプリングする配列です。
- `size` (`number`): サンプリングするサイズです。
### 戻り値
(`T[]`): サンプルサイズが適用された新しい配列です。
### エラー
`size``array` の長さより大きい場合、エラーをスローします。
## 例
```typescript
const result = sampleSize([1, 2, 3], 2);
// 結果は配列の要素から2つを含む配列になります。
// [1, 2] または [1, 3] または [2, 3]
```

View File

@ -0,0 +1,25 @@
# shuffle
配列の要素の順序をランダムに並び替えます。Fisher-Yatesアルゴリズムを使用します。
## インターフェース
```typescript
function shuffle<T>(arr: T[]): T[];
```
### パラメータ
- `arr` (`T[]`): 要素をシャッフルする配列です。
### 戻り値
(`T[]`): 要素がランダムに並び替えられた新しい配列です。
## 例
```typescript
const array = [1, 2, 3, 4, 5];
const shuffledArray = shuffle(array);
// shuffledArrayは配列の要素がランダムに並び替えられた新しい配列 [3, 1, 4, 5, 2] になります。
```

View File

@ -0,0 +1,44 @@
# sortBy
与えられた条件 `criteria` に従って、オブジェクトの配列をソートします。
- 条件がプロパティ名の場合、該当するプロパティの値に基づいてソートします。
- 条件が関数の場合、関数が返す値に基づいてソートします。
配列は昇順でソートされます。条件に基づいて2つの要素の値が同じ場合、次の条件でソートします。
## インターフェース
```typescript
function sortBy<T extends object>(arr: T[], criteria: Array<((item: T) => unknown) | keyof T>): T[];
```
### パラメータ
- `arr` (`T[]`): ソートするオブジェクトの配列。
- `criteria` (`Array<((item: T) => unknown) | keyof T>`): ソートの基準。オブジェクトのプロパティ名または関数を使用できます。
### 戻り値
(`T[]`) 昇順でソートされた配列。
## 例
```typescript
const users = [
{ user: 'foo', age: 24 },
{ user: 'bar', age: 7 },
{ user: 'foo ', age: 8 },
{ user: 'bar ', age: 29 },
];
sortBy(users, ['user', 'age']);
sortBy(users, [obj => obj.user, 'age']);
// 結果は以下のようになります:
// [
// { user : 'bar', age: 7 },
// { user : 'bar', age: 29 },
// { user : 'foo', age: 8 },
// { user : 'foo', age: 24 },
// ]
```

View File

@ -0,0 +1,38 @@
# tail
最初の要素を除いたすべての要素を含む新しい配列を返します。
この関数は配列を入力として受け取り、最初の要素を除いたすべての要素を含む新しい配列を返します。入力配列が空であるか、要素が1つしかない場合は空の配列を返します。
## インターフェース
```typescript
function tail<T>(arr: [T]): [];
function tail(arr: []): [];
function tail<T, U>(arr: [T, ...U[]]): U[];
function tail<T>(arr: T[]): T[];
```
### パラメータ
- `arr` (`T[]`): 最初の要素を除く配列です。
### 戻り値
(`T[]`): 入力配列の最初の要素を除いたすべての要素を含む新しい配列です。
## 例
```typescript
const arr1 = [1, 2, 3];
const result = tail(arr1);
// resultは[2, 3]になります。
const arr2 = [1];
const result2 = tail(arr2);
// result2は[]になります。
const arr3 = [];
const result3 = tail(arr3);
// result3は[]になります。
```

View File

@ -0,0 +1,33 @@
# take
入力配列 `arr` から最初の `count` 個の要素を含む新しい配列を返します。
もし `count``arr` の長さより大きい場合、配列全体を返します。
## インターフェース
```typescript
function take<T>(arr: T[], count: number): T[];
```
### パラメータ
- `arr` (`T[]`): 要素を取得する配列です。
- `count` (`number`): 取得する要素の数です。
### 戻り値
(`T[]`): `arr` から最初の `count` 個の要素を含む新しい配列です。
## 例
```typescript
// [1, 2, 3]
take([1, 2, 3, 4, 5], 3);
// ['a', 'b']
take(['a', 'b', 'c'], 2);
// [1, 2, 3]
take([1, 2, 3], 5);
```

View File

@ -0,0 +1,33 @@
# takeRight
入力配列 `arr` から最後の `count` 個の要素を含む新しい配列を返します。
もし `count``arr` の長さより大きい場合、全体の配列を返します。
## インターフェース
```typescript
function takeRight<T>(arr: T[], count: number): T[];
```
### パラメータ
- `arr` (`T[]`): 要素を取得する配列です。
- `count` (`number`): 取得する要素の数です。
### 戻り値
(`T[]`) `arr` から最後の `count` 個の要素を含む新しい配列です。
## 例
```typescript
// [4, 5]
takeRight([1, 2, 3, 4, 5], 2);
// ['b', 'c']
takeRight(['a', 'b', 'c'], 2);
// [1, 2, 3]
takeRight([1, 2, 3], 5);
```

View File

@ -0,0 +1,29 @@
# takeRightWhile
条件関数が`true`を返す間、配列の末尾から要素を取得します。
条件を満たさない要素が現れると停止します。
## インターフェース
```typescript
function takeRightWhile<T>(arr: T[], shouldContinueTaking: (item: T) => boolean): T[];
```
### パラメータ
- `arr` (`T[]`): 要素を取得する配列です。
- `shouldContinueTaking` (`(item: T) => boolean`): 各要素と共に呼び出される条件関数です。この関数が`true`を返す間、要素が結果に含まれます。
### 戻り値
(`T[]`): 条件関数が`true`を返す間、配列の末尾から取得した要素を含む新しい配列です。
## 例
```typescript
// [3, 2, 1]
takeRightWhile([5, 4, 3, 2, 1], n => n < 4);
// []
takeRightWhile([1, 2, 3], n => n > 3);
```

View File

@ -0,0 +1,29 @@
# takeWhile
与えられた条件関数が`true`を返す先頭の要素を含む新しい配列を返します。
条件を満たさない要素が現れると停止します。
## インターフェース
```typescript
function takeWhile<T>(arr: T[], shouldContinueTaking: (element: T) => boolean): T[];
```
### パラメータ
- `arr` (`T[]`): 要素を取得する配列です。
- `shouldContinueTaking` (`(item: T) => boolean`) 各要素と共に呼び出される条件関数です。この関数が`true`を返す間、要素が結果に含まれます。
### 戻り値
(`T[]`) 条件関数が`true`を返す間、先頭から取得した要素を含む新しい配列です。
## 例
```typescript
// [1, 2] を返します
takeWhile([1, 2, 3, 4], x => x < 3);
// [] を返します
takeWhile([1, 2, 3, 4], x => x > 3);
```

View File

@ -0,0 +1,46 @@
# toFilled
配列の要素を指定された値で埋めます。開始位置から終了位置までの要素を提供された値で置き換えた新しい配列を返します。開始または終了インデックスを提供しない場合、配列全体を埋めます。
負のインデックスを使用することもできます。この場合、配列の末尾からインデックスを計算します。
## インターフェース
```typescript
function toFilled<T, U>(arr: T[], value: U): Array<T | U>;
function toFilled<T, U>(arr: T[], value: U, start: number): Array<T | U>;
function toFilled<T, U>(arr: T[], value: U, start: number, end: number): Array<T | U>;
```
### パラメータ
- `arr` (`T[]`): 埋める配列です。
- `value` (`U`): 配列を埋める値です。
- `start` (`number, デフォルト = 0`): 開始位置です。デフォルトは0です。
- `end` (`number, デフォルト = array.length`): 終了位置です。デフォルトは配列の長さです。
### 戻り値
(`Array<T | U>`): 指定された値で埋められた新しい配列です。
### 例
```typescript
const array = [1, 2, 3, 4, 5];
let result = toFilled(array, '*', 2);
console.log(result); // [1, 2, '*', '*', '*']
console.log(array); // [1, 2, 3, 4, 5]
result = toFilled(array, '*', 1, 4);
console.log(result); // [1, '*', '*', '*', 5]
console.log(array); // [1, 2, 3, 4, 5]
result = toFilled(array, '*');
console.log(result); // ['*', '*', '*', '*', '*']
console.log(array); // [1, 2, 3, 4, 5]
result = toFilled(array, '*', -4, -1);
console.log(result); // [1, '*', '*', '*', 5]
console.log(array); // [1, 2, 3, 4, 5]
```

View File

@ -0,0 +1,27 @@
# union
2つの配列を結合し、重複した値を除いた和集合を返します。
## インターフェース
```typescript
function union<T>(arr1: T[], arr2: T[]): T[];
```
### パラメータ
- `arr1` (`T[]`): 結合する1つ目の配列。
- `arr2` (`T[]`): 結合する2つ目の配列。
### 戻り値
(`T[]`): 結合され、重複した値が除かれた新しい配列。
## 例
```typescript
const array1 = [1, 2, 3];
const array2 = [3, 4, 5];
const result = union(array1, array2);
// resultは [1, 2, 3, 4, 5] になります。
```

View File

@ -0,0 +1,29 @@
# unionBy
`mapper` 関数が返す値を基準に、2つの配列の和集合を返します。
この関数は、パラメータとして2つの配列と `mapper` 関数を受け取ります。
`mapper` 関数で2つの配列の要素を変換したとき、両方の配列に含まれる要素は除去されます。
## インターフェース
```typescript
function unionBy<T, U>(arr1: T[], arr2: T[], mapper: (item: T) => U): T[];
```
### パラメータ
- `arr1` (`T[]`): 1つ目の配列。
- `arr2` (`T[]`): 2つ目の配列。
- `mapper`: (`(item: T) => U`): 比較するために要素を新しい値に変換する関数。
### 戻り値
(`T[]`): 1つ目の配列と2つ目の配列を結合し、`mapper` が返す値を基準にユニークな要素のみを含む新しい配列。
## 例
```typescript
unionBy([{ id: 1 }, { id: 2 }], [{ id: 2 }, { id: 3 }], x => x.id);
// 結果は [{ id: 1 }, { id: 2 }, { id: 3 }] になります。
```

View File

@ -0,0 +1,32 @@
# unionWith
2つの要素が一致するかどうかを判断するカスタム関数を基準に、2つの配列の和集合を返します。
この関数は、パラメータとして2つの配列とカスタム一致関数を受け取ります。
この関数は、2つの配列を結合した後、カスタム一致関数の戻り値を基準に重複した要素を除去した新しい配列を返します。
## インターフェース
```typescript
function unionWith<T>(arr1: T[], arr2: T[], areItemsEqual: (item1: T, item2: T) => boolean): T[];
```
### パラメータ
- `arr1` (`T[]`): 比較する最初の配列。
- `arr2` (`T[]`): 比較する2番目の配列。
- `areItemsEqual` (`(x: T, y: T) => boolean`): 2つの要素が一致するかどうかを判断する一致関数です。2つの要素が一致する場合は `true` を、一致しない場合は `false` を返すようにしてください。
### 戻り値
(`T[]`): カスタム一致関数の戻り値を基準に、2つの配列の和集合を表す新しい配列。
## 例
```typescript
const array1 = [{ id: 1 }, { id: 2 }];
const array2 = [{ id: 2 }, { id: 3 }];
const areItemsEqual = (a, b) => a.id === b.id;
const result = unionWith(array1, array2, areItemsEqual);
// 結果は [{ id: 1 }, { id: 2 }, { id: 3 }] になります。{ id: 2 } は両方の配列に含まれているためです。
```

View File

@ -0,0 +1,27 @@
# uniq
配列内の要素の重複を削除します。
この関数は配列を受け取り、元の配列から一意の値のみを含む新しい配列を返します。新しい配列内の要素の順序は、元の配列で最初に登場する順序を維持します。
## インターフェース
```typescript
function uniq<T>(arr: T[]): T[];
```
### パラメータ
- `arr` (`T[]`): 要素の重複を削除する配列です。
### 戻り値
(`T[]`): 元の配列から一意の要素のみを含む新しい配列です。
## 例
```typescript
const array = [1, 2, 2, 3, 4, 4, 5];
const result = uniq(array);
// resultは[1, 2, 3, 4, 5]になります。
```

View File

@ -0,0 +1,25 @@
# uniqBy
`mapper` 関数が返す値を基準に、配列内の要素の重複を除去します。
## インターフェース
```typescript
function uniqBy<T, U>(arr: T[], mapper: (item: T) => U): T[];
```
### パラメータ
- `arr` (`T[]`): 重複を除去する配列。
- `mapper` (`(item: T) => U`): 比較のために要素を新しい値に変換する関数。
### 戻り値
(`T[]`): `mapper` 関数が返す値を基準に重複が除去された配列。
## 例
```typescript
uniqBy([1.2, 1.5, 2.1, 3.2, 5.7, 5.3, 7.19], Math.floor);
// [1.2, 2.1, 3.2, 5.7, 7.19]
```

View File

@ -0,0 +1,25 @@
# uniqWith
2つの要素が一致するかどうかを判断するカスタム関数を基準に、配列内の要素の重複を除去します。
## インターフェース
```typescript
function uniqWith<T>(arr: T[], areItemsEqual: (item1: T, item2: T) => boolean): T[];
```
### パラメータ
- `arr` (`T[]`): 重複を除去する配列。
- `areItemsEqual` (`(x: T, y: T) => boolean`): 2つの要素が一致するかどうかを判断する一致関数です。2つの要素が一致する場合は `true` を、一致しない場合は `false` を返すようにしてください。
### 戻り値
(`T[]`): カスタム一致関数の戻り値を基準に、重複が除去された新しい配列。
## 例
```typescript
uniqWith([1.2, 1.5, 2.1, 3.2, 5.7, 5.3, 7.19], (a, b) => Math.abs(a - b) < 1);
// [1.2, 3.2, 5.7, 7.19]
```

View File

@ -0,0 +1,28 @@
# unzip
2次元配列を引数として受け取り、各配列内の配列から同じ位置にある要素を集めて新しい配列として返します。
## インターフェース
```typescript
type Unzip<K extends unknown[]> = { [I in keyof K]: Array<K[I]> };
function unzip<T extends unknown[]>(zipped: Array<[...T]>): Unzip<T>;
```
### パラメータ
- `zipped` (`Array<[...T]>`): 結合された要素の配列です。
### 戻り値
(`Unzip<T>`): 内部配列の同じ位置にある要素を集めて作成された新しい配列です。
## 例
```typescript
unzip([
['a', true, 1],
['b', false, 2],
]);
// 戻り値: [['a', 'b'], [true, false], [1, 2]]
```

View File

@ -0,0 +1,30 @@
# unzipWith
結合された2次元配列を1次元配列に解き、`iteratee`関数で値を変換して新しい配列を返します。
## インターフェース
```typescript
function unzipWith<T, R>(target: T[][], iteratee: (...args: T[]) => R): R[];
```
### パラメータ
- `target` (`T[][]`): 結合を解いて変換する配列です。
- `iteratee` (`(...args: T[]) => R`): 結合が解かれた配列を変換する関数です。
### 戻り値
(`R[]`): 結合を解いて変換された値で作られた新しい配列です。
## 例
```typescript
const nestedArray = [
[1, 2],
[3, 4],
[5, 6],
];
const result = unzipWith(nestedArray, (item, item2, item3) => item + item2 + item3);
// [9, 12]
```

View File

@ -0,0 +1,42 @@
# without
配列から指定された値を除いた新しい配列を作成します。
値の等価性は[SameValueZero](https://tc39.es/ecma262/multipage/abstract-operations.html#sec-samevaluezero)アルゴリズムを使用して比較されるため、`NaN`との比較も可能です。
## インターフェース
```typescript
function without<T>(array: T[], ...values: T[]): T[];
```
### パラメータ
- `array` (`T[]`): 値を除去する対象の配列。
- `values` (`...T[]`): 除去する値。
### 戻り値
(`T[]`) 指定された値を除いた新しい配列。
## 例
```typescript
import { without } from 'es-toolkit/array';
// 配列から指定された値を除去します
without([1, 2, 3, 4, 5], 2, 4);
// 結果: [1, 3, 5]
// 配列から指定された文字列値を除去します
without(['a', 'b', 'c', 'a'], 'a');
// 結果: ['b', 'c']
// 指定された値が配列に存在しない場合の処理
without([1, 2, 3], 4, 5);
// 結果: [1, 2, 3]
// 異なる型の値を含む場合の処理
without([1, '2', 3, '4'], 2, '4');
// 結果: [1, '2', 3]
```

View File

@ -0,0 +1,28 @@
# xor
2つの配列間の対称差集合を計算します。対称差集合は、2つの配列のいずれかに含まれるが、両方には含まれない要素の集合です。
## インターフェース
```typescript
function xor<T>(arr1: T[], arr2: T[]): T[];
```
### パラメータ
- `arr1` (`T[]`): 1つ目の配列です。
- `arr2` (`T[]`): 2つ目の配列です。
### 戻り値
(`T[]`): `arr1`または`arr2`に含まれるが、両方の配列の共通部分には含まれない要素を含む配列です。
## 例
```typescript
// [1, 2, 5, 6]を返します。
xor([1, 2, 3, 4], [3, 4, 5, 6]);
// ['a', 'c']を返します。
xor(['a', 'b'], ['b', 'c']);
```

View File

@ -0,0 +1,29 @@
# xorBy
`mapper` 関数が返す値を基準に、2つの配列の対称差集合を返します。
この関数は、パラメータとして2つの配列と`mapper`関数を受け取ります。
`mapper`関数で2つの配列の要素を変換した時、2つの配列のうち一方にはあるが共通部分にはない要素で構成される新しい配列を返します。
## インターフェース
```typescript
function xorBy<T, U>(arr1: T[], arr2: T[], mapper: (item: T) => U): T[];
```
### パラメータ
- `arr1` (`T[]`): 1つ目の配列です。
- `arr2` (`T[]`): 2つ目の配列です。
- `mapper` (`(item: T) => U`): 比較するために要素を新しい値に変換する関数。
### 戻り値
(`T[]`): `mapper`が返した値に基づいて、`arr1`または`arr2`にあるが両方にはない要素を含む配列です。
## 例
```typescript
xorBy([{ id: 1 }, { id: 2 }], [{ id: 2 }, { id: 3 }], x => x.id);
// [{ id: 1 }, { id: 3 }]を返します。
```

View File

@ -0,0 +1,29 @@
# xorWith
2つの要素が一致するかどうかを判断するカスタム関数を基準に、2つの配列の対称差集合を返します。
この関数は、パラメータとして2つの配列とカスタム一致関数を受け取ります。
この関数は2つの配列を結合した後、カスタム一致関数の戻り値を基準に、どちらか一方にのみ含まれる要素で構成される新しい配列を返します。
## インターフェース
```typescript
function xorWith<T>(arr1: T[], arr2: T[], areElementsEqual: (item1: T, item2: T) => boolean): T[];
```
### パラメータ
- `arr1` (`T[]`): 1つ目の配列です。
- `arr2` (`T[]`): 2つ目の配列です。
- `areItemsEqual` (`(x: T, y: T) => boolean`): 2つの要素が一致するかどうかを判断する一致関数です。2つの要素が一致する場合は `true` を、一致しない場合は `false` を返すようにしてください。
### 戻り値
(`T[]`): カスタム一致関数の戻り値を基準に、2つの配列の対称差集合を表す新しい配列。
## 例
```typescript
xorWith([{ id: 1 }, { id: 2 }], [{ id: 2 }, { id: 3 }], (a, b) => a.id === b.id);
// [{ id: 1 }, { id: 3 }] を返します。
```

View File

@ -0,0 +1,36 @@
# zip
複数の配列を単一のタプルの配列に結合します。
この関数は複数の配列を入力として受け取り、各要素が入力配列の対応する要素を含むタプルである新しい配列を返します。入力配列の長さが異なる場合、結果の配列の長さは最も長い入力配列の長さになり、不足している要素は`undefined`で埋められます。
## インターフェース
```typescript
function zip<T>(arr1: T[]): [T][];
function zip<T, U>(arr1: T[], arr2: U[]): [T, U][];
function zip<T, U, V>(arr1: T[], arr2: U[], arr3: V[]): [T, U, V][];
function zip<T, U, V, W>(arr1: T[], arr2: U[], arr3: V[], arr4: W[]): [T, U, V, W][];
function zip<T>(...arrs: T[][]): T[][];
```
### パラメータ
- `...arrs` (`T[][]`): 結合する配列です。
### 戻り値
(`T[][]`): 入力配列の要素を含むタプルからなる新しい配列です。
## 例
```typescript
const arr1 = [1, 2, 3];
const arr2 = ['a', 'b', 'c'];
const result = zip(arr1, arr2);
// resultは [[1, 'a'], [2, 'b'], [3, 'c']] になります。
const arr3 = [true, false];
const result2 = zip(arr1, arr2, arr3);
// result2は [[1, 'a', true], [2, 'b', false], [3, 'c', undefined]] になります。
```

View File

@ -0,0 +1,39 @@
# zipObject
2つの配列を1つのオブジェクトに結合します。最初の配列はプロパティ名を表し、2番目の配列は値を表します。
プロパティ名を表す配列が値を表す配列よりも長い場合、値は`undefined`で埋められます。
## インターフェース
```typescript
function zipObject<P extends string | number | symbol, V>(keys: P[], values: V[]): { [K in P]: V };
```
### パラメータ
- `keys` (`P[]`): プロパティ名が含まれる配列です。
- `values` (`V[]`): プロパティ名に対応する値が含まれる配列です。
### 戻り値
(`{ [K in P]: V }`): 与えられたプロパティ名と値で構成される新しいオブジェクトです。
## 例
```typescript
const keys = ['a', 'b', 'c'];
const values = [1, 2, 3];
const result = zipObject(keys, values);
// resultは { a: 1, b: 2, c: 3 } になります。
const keys2 = ['a', 'b', 'c'];
const values2 = [1, 2];
const result2 = zipObject(keys2, values2);
// result2は { a: 1, b: 2, c: undefined } になります。
const keys3 = ['a', 'b'];
const values3 = [1, 2, 3];
const result3 = zipObject(keys3, values3);
// result3は { a: 1, b: 2 } になります。
```

View File

@ -0,0 +1,48 @@
# zipWith
カスタム結合関数を使用して複数の配列を単一の配列に結合します。
この関数は複数の配列と結合関数を入力として受け取り、入力配列の要素に結合関数を適用した結果からなる新しい配列を返します。
## インターフェース
```typescript
function zipWith<T, R>(arr1: T[], combine: (item: T) => R): R[];
function zipWith<T, U, R>(arr1: T[], arr2: U[], combine: (item1: T, item2: U) => R): R[];
function zipWith<T, U, V, R>(arr1: T[], arr2: U[], arr3: V[], combine: (item1: T, item2: U, item3: V) => R): R[];
function zipWith<T, U, V, W, R>(
arr1: T[],
arr2: U[],
arr3: V[],
arr4: W[],
combine: (item1: T, item2: U, item3: V, item4: W) => R
): R[];
```
### パラメータ
- `arr1` (`T[]`): 最初に結合する配列です。
- `arr2` (`U[]`, オプション): 2番目に結合する配列です。
- `arr3` (`V[]`, オプション): 3番目に結合する配列です。
- `arr4` (`W[]`, オプション): 4番目に結合する配列です。
- `combine` (`(item1: T, item2: U, item3: V, item4: W) => R`): 各配列の要素を受け取り、単一の値を返す結合関数です。
### 戻り値
(`R[]`): 入力配列の要素に結合関数を適用した結果からなる新しい配列です。
## 例
```typescript
// 2つの配列を使用した例
const arr1 = [1, 2, 3];
const arr2 = [4, 5, 6];
const result = zipWith(arr1, arr2, (a, b) => a + b);
// resultは [5, 7, 9] になります。
// 3つの配列を使用した例
const arr1 = [1, 2];
const arr2 = [3, 4];
const arr3 = [5, 6];
const result = zipWith(arr1, arr2, arr3, (a, b, c) => `${a}${b}${c}`);
// resultは ['135', '246'] になります。
```

View File

@ -0,0 +1,43 @@
# concat
::: info
この関数は互換性のために `es-toolkit/compat` からのみインポートできます。代替可能なネイティブ JavaScript API があるか、まだ十分に最適化されていないためです。
`es-toolkit/compat` からこの関数をインポートすると、[lodash と完全に同じように動作](../../../compatibility.md)します。
:::
複数の配列と値を1つの配列に連結します。
## インターフェース
```typescript
function concat<T>(...values: Array<T | T[]>): T[];
```
### パラメータ
- `values` (`...(T | T[])`): 連結する配列または値。
### 戻り値
(`T[]`): すべての配列と値が連結された新しい配列。
### 例
```typescript
// 値を連結
concat(1, 2, 3);
// 戻り値: [1, 2, 3]
// 配列を連結
concat([1, 2], [3, 4]);
// 戻り値: [1, 2, 3, 4]
// 値と配列を混ぜて連結
concat(1, [2, 3], 4);
// 戻り値: [1, 2, 3, 4]
// ネストされた配列を連結する場合
concat([1, [2, 3]], 4);
// 戻り値: [1, [2, 3], 4]
```

View File

@ -0,0 +1,119 @@
# find
::: info
この関数は互換性のために `es-toolkit/compat` からのみインポートできます。代替可能なネイティブ JavaScript API があるか、まだ十分に最適化されていないためです。
`es-toolkit/compat` からこの関数をインポートすると、[lodash と完全に同じように動作](../../../compatibility.md)します。
:::
配列やオブジェクトから条件に合う最初の値を見つけます。
条件は複数の方法で指定できます。
- **検査関数**: 各要素に対して検査する関数を実行します。最初に `true` を返す値が選択されます。
- **部分オブジェクト**: 与えられたオブジェクトと部分的に一致する最初の要素が選択されます。
- **プロパティ-値ペア**: 該当プロパティに対して値が一致する最初の要素が選択されます。
- **プロパティ名**: 該当プロパティに対して真と評価される値を持つ最初の要素が選択されます。
## インターフェース
```typescript
function find<T>(arr: T[], doesMatch: (item: T, index: number, arr: T[]) => unknown): T | undefined;
function find<T>(arr: T[], doesMatch: Partial<T>): T | undefined;
function find<T>(arr: T[], doesMatch: [keyof T, unknown]): T | undefined;
function find<T>(arr: T[], doesMatch: string): T | undefined;
function find<T extends Record<string, unknown>>(
object: T,
doesMatch: (item: T[keyof T], index: number, object: T) => unknown
): T | undefined;
function find<T extends Record<string, unknown>>(object: T, doesMatch: Partial<T[keyof T]>): T | undefined;
function find<T extends Record<string, unknown>>(object: T, doesMatch: [keyof T, unknown]): T | undefined;
function find<T extends Record<string, unknown>>(object: T, doesMatch: string): T | undefined;
```
### パラメータ
- `arr` (`T[]`) または `object` (`T`): 検索する配列またはオブジェクト。
- `doesMatch`:
- 配列の場合:
- **検査関数** (`(item: T, index: number, arr: T[]) => unknown`): 探している要素かどうかを返す関数。
- **部分オブジェクト** (`Partial<T>`): 一致させるプロパティと値を指定した部分オブジェクト。
- **プロパティ-値ペア** (`[keyof T, unknown]`): 最初が一致させるプロパティ、2番目が一致させる値を表すタプル。
- **プロパティ名** (`string`): 真と評価される値を持っているか確認するプロパティ名。
- オブジェクトの場合:
- **検査関数** (`(item: T[keyof T], index: number, object: T) => unknown`): 探している要素かどうかを返す関数。
- **部分値** (`Partial<T[keyof T]>`): 一致させるプロパティと値を指定した部分オブジェクト。
- **プロパティ-値ペア** (`[keyof T, unknown]`): 最初が一致させるプロパティ、2番目が一致させる値を表すタプル。
- **プロパティ名** (`string`): 真と評価される値を持っているか確認するプロパティ名。
### 戻り値
(`T | undefined`): 与えられた条件を満たす最初の要素。ない場合は `undefined`
## 例
### 配列の場合
```typescript
import { find } from 'es-toolkit/compat';
// 検査関数を使う場合
const items = [1, 2, 3, 4, 5];
const result = find(items, item => item > 3);
console.log(result); // 4
// 部分オブジェクトを使う場合
const items = [
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' },
];
const result = find(items, { name: 'Bob' });
console.log(result); // { id: 2, name: 'Bob' }
// プロパティ-値ペアを使う場合
const items = [
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' },
];
const result = find(items, ['name', 'Alice']);
console.log(result); // { id: 1, name: 'Alice' }
// プロパティ名を使う場合
const items = [
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' },
];
const result = find(items, 'name');
console.log(result); // { id: 1, name: 'Alice' }
```
### オブジェクトの場合
```typescript
import { find } from 'es-toolkit/compat';
// 検査関数を使う場合
const obj = { a: 1, b: 2, c: 3 };
const result = find(obj, item => item > 2);
console.log(result); // 3
// 部分オブジェクトを使う場合
const obj = { a: { id: 1, name: 'Alice' }, b: { id: 2, name: 'Bob' } };
const result = find(obj, { name: 'Bob' });
console.log(result); // { id: 2, name: 'Bob' }
// プロパティ-値ペアを使う場合
const items = { alice: { id: 1, name: 'Alice' }, bob: { id: 2, name: 'Bob' } };
const result = find(items, ['name', 'Alice']);
console.log(result); // { id: 1, name: 'Alice' }
// プロパティ名を使う場合
const obj = { a: { id: 1, name: 'Alice' }, b: { id: 2, name: 'Bob' } };
const result = find(obj, 'name');
console.log(result); // { id: 1, name: 'Alice' }
```

View File

@ -0,0 +1,75 @@
# findIndex
::: info
この関数は互換性のために `es-toolkit/compat` からのみインポートできます。代替可能なネイティブ JavaScript API があるか、まだ十分に最適化されていないためです。
`es-toolkit/compat` からこの関数をインポートすると、[lodash と完全に同じように動作](../../../compatibility.md)します。
:::
配列から条件に合う最初の値のインデックスを返します。
条件は複数の方法で指定できます。
- **検査関数**: 各要素に対して検査する関数を実行します。最初に `true` を返す値が選択されます。
- **部分オブジェクト**: 与えられたオブジェクトと部分的に一致する最初の要素が選択されます。
- **プロパティ-値ペア**: 該当プロパティに対して値が一致する最初の要素が選択されます。
- **プロパティ名**: 該当プロパティに対して真と評価される値を持つ最初の要素が選択されます。
## インターフェース
```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;
```
### パラメータ
- `arr` (`T[]`): 検索する配列。
- `doesMatch`:
- **検査関数** (`(item: T, index: number, arr: T[]) => unknown`): 探している要素かどうかを返す関数。
- **部分オブジェクト** (`Partial<T>`): 一致させるプロパティと値を指定した部分オブジェクト。
- **プロパティ-値ペア** (`[keyof T, unknown]`): 最初が一致させるプロパティ、2番目が一致させる値を表すタプル。
- **プロパティ名** (`string`): 真と評価される値を持っているか確認するプロパティ名。
### 戻り値
(`number`): 与えられた条件を満たす最初の要素のインデックス。ない場合は `-1`
## 例
```typescript
import { findIndex } from 'es-toolkit/compat';
// 検査関数を使う場合
const items = [1, 2, 3, 4, 5];
const result = findIndex(items, item => item > 3);
console.log(result); // 3
// 部分オブジェクトを使う場合
const items = [
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' },
];
const result = findIndex(items, { name: 'Bob' });
console.log(result); // 0
// プロパティ-値ペアを使う場合
const items = [
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' },
];
const result = findIndex(items, ['name', 'Alice']);
console.log(result); // 0
// プロパティ名を使う場合
const items = [
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' },
];
const result = findIndex(items, 'name');
console.log(result); // 0
```

View File

@ -0,0 +1,36 @@
# indexOf
::: info
この関数は互換性のために `es-toolkit/compat` からのみインポートできます。代替可能なネイティブ JavaScript API があるか、まだ十分に最適化されていないためです。
`es-toolkit/compat` からこの関数をインポートすると、[lodash と完全に同じように動作](../../../compatibility.md)します。
:::
配列内で指定された要素が最初に一致するインデックスを見つけます。
`Array.prototype.indexOf` とほぼ同じように動作しますが、`NaN` 値を見つけることができます。
`NaN` 以外の要素を比較する際は、厳密等価演算子(`===`)を使用します。
## インターフェース
```typescript
function indexOf<T>(array: T[] | null | undefined, searchElement: T, fromIndex?: number): number;
```
### パラメータ
- `array` (`T[] | null | undefined`): 検索対象の配列。
- `searchElement` (`T`): 検索する値。
- `fromIndex` (`number`, オプション): 検索を開始するインデックス。
### 戻り値
(`number`): 配列内で指定された値と最初に一致する要素のインデックス。一致する要素が見つからない場合は `-1` を返します。
### 例
```typescript
const array = [1, 2, 3, NaN];
indexOf(array, 3); // => 2
indexOf(array, NaN); // => 3
```

View File

@ -0,0 +1,34 @@
# max
::: info
この関数は互換性のために `es-toolkit/compat` からのみインポートできます。代替可能なネイティブ JavaScript API があるか、まだ十分に最適化されていないためです。
`es-toolkit/compat` からこの関数をインポートすると、[lodash と完全に同じように動作](../../../compatibility.md)します。
:::
配列から最大値を持つ要素を返します。
配列が空の場合は、`undefined` を返します。
## インターフェース
```typescript
function max<T>(items: [T, ...T[]]): T;
function max(): undefined;
function max<T>(items?: T[]): T | undefined;
```
### パラメータ
- `items` (`T[]`): 最大値を持つ要素を探す配列。
### 戻り値
(`T`): 配列から最大値を持つ要素。配列が空の場合は `undefined` を返します。
### 例
```typescript
max([1, 2, 3]); // 戻り値: 3
max(['a', 'b']); // 戻り値: 'b'
```

View File

@ -0,0 +1,34 @@
# min
::: info
この関数は互換性のために `es-toolkit/compat` からのみインポートできます。代替可能なネイティブ JavaScript API が存在するか、まだ十分に最適化されていないためです。
`es-toolkit/compat` からこの関数をインポートすると、[lodash と完全に同じように動作](../../../compatibility.md)します。
:::
配列から最小値を持つ要素を返します。
配列が空の場合は、`undefined` を返します。
## インターフェース
```typescript
function min<T>(items: [T, ...T[]]): T;
function min(): undefined;
function min<T>(items?: T[]): T | undefined;
```
### パラメータ
- `items` (`T[]`): 最小値を持つ要素を探す配列。
### 戻り値
(`T`): 配列の中で最小値を持つ要素。配列が空の場合は `undefined` を返します。
### 例
```typescript
min([1, 2, 3]); // 戻り値: 1
min(['a', 'b']); // 戻り値: 'a'
```

View File

@ -0,0 +1,53 @@
# size
::: info
この関数は互換性のために `es-toolkit/compat` からのみインポートできます。代替可能なネイティブ JavaScript API があるか、まだ十分に最適化されていないためです。
`es-toolkit/compat` からこの関数をインポートすると、[lodash と完全に同じように動作](../../../compatibility.md)します。
:::
与えられた引数のサイズを返します。
配列、文字列、数値のサイズを計算します。配列は含まれる要素の数を、文字列は文字の数を、オブジェクトは列挙可能なプロパティの数を返します。
## インターフェース
```typescript
function size<T>(value: T[] | object | string | Map<unknown, T> | Set<T> | null | undefined): number;
```
### パラメータ
- `value` (`T`): サイズを確認する配列、文字列、またはオブジェクト。
### 戻り値
(`number`): 入力値のサイズ。
## 例
```typescript
const arr = [1, 2, 3];
const arrSize = size(arr);
// arrSize は 3 です。
const str = 'hello';
const strSize = size(str);
// strSize は 5 です。
const obj = { a: 1, b: 2, c: 3 };
const objSize = size(obj);
// objSize は 3 です。
const emptyArr = [];
const emptyArrSize = size(emptyArr);
// emptyArrSize は 0 です。
const emptyStr = '';
const emptyStrSize = size(emptyStr);
// emptyStrSize は 0 です。
const emptyObj = {};
const emptyObjSize = size(emptyObj);
// emptyObjSize は 0 です。
```

View File

@ -0,0 +1,57 @@
# zipObjectDeep
::: info
この関数は互換性のために `es-toolkit/compat` からのみインポートできます。代替となるネイティブ JavaScript API が存在するか、まだ十分に最適化されていないためです。
`es-toolkit/compat` からこの関数をインポートすると、[lodash と完全に同じように動作](../../../compatibility.md)します。
:::
2つの配列を1つのオブジェクトに結合します。最初の配列はプロパティパスを表し、2番目の配列は値を表します。[zipObject](../../array/zipObject.md) とは異なり、プロパティとして `a.b` のようなパスを指定できます。
プロパティ名を表す配列が値を表す配列よりも長い場合、値は `undefined` で埋められます。
## インターフェース
```typescript
function zipObjectDeep<P extends string | number | symbol, V>(keys: P[], values: V[]): { [K in P]: V };
```
### パラメータ
- `keys` (`P[]`): プロパティパスを含む配列。
- `values` (`V[]`): 対応する値を含む配列。
### 戻り値
(`{ [K in P]: V }`): 与えられたプロパティ名と値で構成される新しいオブジェクトです。
## 例
```typescript
import { zipObjectDeep } from 'es-toolkit/compat';
const paths = ['a.b.c', 'd.e.f'];
const values = [1, 2];
const result = zipObjectDeep(paths, values);
// result は { a: { b: { c: 1 } }, d: { e: { f: 2 } } } になります
const paths = [
['a', 'b', 'c'],
['d', 'e', 'f'],
];
const values = [1, 2];
const result = zipObjectDeep(paths, values);
// result は { a: { b: { c: 1 } }, d: { e: { f: 2 } } } になります
const paths = ['a.b[0].c', 'a.b[1].d'];
const values = [1, 2];
const result = zipObjectDeep(paths, values);
// result は { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } } になります
```
## パフォーマンス比較
| | [Bundle Size](../../../bundle-size.md) | [Performance](../../../performance.md) |
| ----------------- | -------------------------------------- | -------------------------------------- |
| es-toolkit/compat | 938 bytes (88% smaller) | 1,102,767 times (25% slower) |
| lodash-es | 7,338 bytes | 1,476,660 times |

View File

@ -0,0 +1,54 @@
# bind
::: info
この関数は互換性のために `es-toolkit/compat` からのみインポートできます。代替可能なネイティブ JavaScript API があるか、まだ十分に最適化されていないためです。
`es-toolkit/compat` からこの関数をインポートすると、[lodash と完全に同じように動作](../../../compatibility.md)します。
:::
関数の `this` を固定し、`partialArgs` で事前に引数を提供します。
Symbol 型の `bind.placeholder` を使用すると、事前に提供した引数が使用される位置を決定できます。
組み込みの `Function#bind` とは異なり、関数の `length` プロパティは設定しません。
## インターフェース
```typescript
function bind<F extends Function>(func: F, thisObj?: unknown, ...partialArgs: any[]): F;
namespace bind {
placeholder: symbol;
}
```
### パラメータ
- `func` (`F`): `this` を固定する関数。
- `thisObj` (`any`, オプション): 関数に固定される `this` オブジェクト。
- `partialArgs` (`any[]`): 事前に与えられる引数。
### 戻り値
(`F`): `this` が固定された関数。
## 例
```typescript
import { bind } from 'es-toolkit/compat';
function greet(greeting, punctuation) {
return greeting + ' ' + this.user + punctuation;
}
const object = { user: 'fred' };
let bound = bind(greet, object, 'hi');
bound('!');
// => 'hi fred!'
// プレースホルダーを使用してバインド
bound = bind(greet, object, bind.placeholder, '!');
bound('hi');
// => 'hi fred!'
```

View File

@ -0,0 +1,113 @@
# get
::: info
この関数は互換性のために `es-toolkit/compat` からのみインポートできます。代替可能なネイティブ JavaScript API があるか、まだ十分に最適化されていないためです。
`es-toolkit/compat` からこの関数をインポートすると、[lodash と完全に同じように動作](../../../compatibility.md)します。
:::
オブジェクトから指定されたパスにある値を取得します。その値が `undefined` の場合、デフォルト値を返します。
## インターフェース
```typescript
function get<T extends object, K extends keyof T>(object: T, path: K | [K]): T[K];
function get<T extends object, K extends keyof T>(object: T | null | undefined, path: K | [K]): T[K] | undefined;
function get<T extends object, K extends keyof T, D>(
object: T | null | undefined,
path: K | [K],
defaultValue: D
): Exclude<T[K], undefined> | D;
function get<T extends object, K1 extends keyof T, K2 extends keyof T[K1]>(object: T, path: [K1, K2]): T[K1][K2];
function get<T extends object, K1 extends keyof T, K2 extends keyof T[K1]>(
object: T | null | undefined,
path: [K1, K2]
): T[K1][K2] | undefined;
function get<T extends object, K1 extends keyof T, K2 extends keyof T[K1], D>(
object: T | null | undefined,
path: [K1, K2],
defaultValue: D
): Exclude<T[K1][K2], undefined> | D;
function get<T extends object, K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2]>(
object: T,
path: [K1, K2, K3]
): T[K1][K2][K3];
function get<T extends object, K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2]>(
object: T | null | undefined,
path: [K1, K2, K3]
): T[K1][K2][K3] | undefined;
function get<T extends object, K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], D>(
object: T | null | undefined,
path: [K1, K2, K3],
defaultValue: D
): Exclude<T[K1][K2][K3], undefined> | D;
function get<
T extends object,
K1 extends keyof T,
K2 extends keyof T[K1],
K3 extends keyof T[K1][K2],
K4 extends keyof T[K1][K2][K3],
>(object: T, path: [K1, K2, K3, K4]): T[K1][K2][K3][K4];
function get<
T extends object,
K1 extends keyof T,
K2 extends keyof T[K1],
K3 extends keyof T[K1][K2],
K4 extends keyof T[K1][K2][K3],
>(object: T | null | undefined, path: [K1, K2, K3, K4]): T[K1][K2][K3][K4] | undefined;
function get<
T extends object,
K1 extends keyof T,
K2 extends keyof T[K1],
K3 extends keyof T[K1][K2],
K4 extends keyof T[K1][K2][K3],
D,
>(object: T | null | undefined, path: [K1, K2, K3, K4], defaultValue: D): Exclude<T[K1][K2][K3][K4], undefined> | D;
function get<T>(object: Record<number, T>, path: number): T;
function get<T>(object: Record<number, T> | null | undefined, path: number): T | undefined;
function get<T, D>(object: Record<number, T> | null | undefined, path: number, defaultValue: D): T | D;
function get<D>(object: null | undefined, path: PropertyKey, defaultValue: D): D;
function get(object: null | undefined, path: PropertyKey): undefined;
function get<T, P extends string>(data: T, path: P): string extends P ? any : Get<T, P>;
function get<T, P extends string, D = Get<T, P>>(
data: T,
path: P,
defaultValue: D
): Exclude<Get<T, P>, null | undefined> | D;
function get(object: unknown, path: PropertyKey, defaultValue?: unknown): any;
function get(object: unknown, path: PropertyKey | readonly PropertyKey[], defaultValue?: unknown): any;
```
### パラメータ
- `obj` (`object`): 検索対象のオブジェクト。
- `path` (`string` または `number` または `symbol` または `Array<string | number | symbol>`): プロパティを取得するパス。
- `defaultValue` (`unknown`): 見つかった値が `undefined` の場合に返す値。
### 戻り値
(`Get<T, P>`): 見つかった値。
### 例
```typescript
import { get } from 'es-toolkit/compat';
const obj = {
a: {
b: 4,
},
};
get(obj, 'a.b'); // 4
get(obj, ['a', 'b']); // 4
get(obj, ['a', 'c']); // undefined
get(obj, ['a', 'c'], null); // null
```

View File

@ -0,0 +1,60 @@
# has
::: info
この関数は互換性のために `es-toolkit/compat` からのみインポートできます。代替可能なネイティブ JavaScript API があるか、まだ十分に最適化されていないためです。
`es-toolkit/compat` からこの関数をインポートすると、[lodash と完全に同じように動作](../../../compatibility.md)します。
:::
オブジェクトが指定されたパスに対応するプロパティを持っているかどうかを確認します。
パスとしては、オブジェクトのプロパティ名、プロパティ名の配列、または深いパスを表す文字列を使用できます。
パスがインデックスを表し、オブジェクトが配列または `arguments` オブジェクトの場合、そのインデックスが有効か0以上で長さ未満かを確認します。そのため、すべてのインデックスが定義されていないスパース配列Sparse arrayにも使用できます。
## インターフェース
```typescript
function has(object: unknown, path: string | number | symbol | Array<string | number | symbol>): boolean;
```
### パラメータ
- `object` (`unknown`): プロパティの存在を確認するオブジェクト。
- `path` (`string`, `number`, `symbol`, `Array<string | number | symbol>`): プロパティの存在を確認するパス。プロパティ名、プロパティ名の配列、または深いパスを表す文字列を使用できます。
### 戻り値
(`boolean`): オブジェクトがパスに値を持っている場合は `true`、そうでない場合は `false`
## 例
```typescript
import { has } from 'es-toolkit/compat';
const obj = { a: { b: { c: 3 } } };
has(obj, 'a'); // true
has(obj, ['a', 'b']); // true
has(obj, ['a', 'b', 'c']); // true
has(obj, 'a.b.c'); // true
has(obj, 'a.b.d'); // false
has(obj, ['a', 'b', 'c', 'd']); // false
has([], 0); // false
has([1, 2, 3], 2); // true
has([1, 2, 3], 5); // false
```
## デモ
::: sandpack
```ts index.ts
import { has } from 'es-toolkit/compat';
const obj = { a: { b: { c: 3 } } };
console.log(has(obj, 'a.b.c'));
```
:::

View File

@ -0,0 +1,37 @@
# property
::: info
この関数は互換性のために `es-toolkit/compat` からのみインポートできます。代替可能なネイティブ JavaScript API があるか、まだ十分に最適化されていないためです。
`es-toolkit/compat` からこの関数をインポートすると、[lodash と完全に同じように動作](../../../compatibility.md)します。
:::
オブジェクトの指定されたパスにある値を取得する関数を作成します。値を取得するには [`get`](./get.md) 関数を使用します。
## インターフェース
```typescript
function property(path: PropertyKey | readonly PropertyKey[]): (object: unknown) => any;
```
### パラメータ
- `path` (`string` または `number` または `symbol` または `Array<string | number | symbol>`): プロパティを取得するパス。
### 戻り値
(`(object: unknown) => any`): オブジェクトの指定されたパスにある値を取得する関数。
### 例
```typescript
import { property } from 'es-toolkit/compat';
const getObjectValue = property('a.b.c');
const result = getObjectValue({ a: { b: { c: 3 } } });
console.log(result); // => 3
const getObjectValue = property(['a', 'b', 'c']);
const result = getObjectValue({ a: { b: { c: 3 } } });
console.log(result); // => 3
```

View File

@ -0,0 +1,58 @@
# set
::: info
この関数は互換性のために `es-toolkit/compat` からのみインポートできます。代替可能なネイティブ JavaScript API が存在するか、まだ十分に最適化されていないためです。
`es-toolkit/compat` からこの関数をインポートすると、[lodash と完全に同じように動作](../../../compatibility.md)します。
:::
指定されたパスに与えられた値を設定します。パスの一部が存在しない場合は作成されます。
## インターフェース
```typescript
function set<T extends object>(
obj: T,
path: string | number | symbol | Array<string | number | symbol>,
value: unknown
): T;
```
### パラメータ
- `obj` (`T`): 値を設定するオブジェクト。
- `path` (`string | number | symbol | Array<string | number | symbol>`): 値を設定するプロパティのパス。
- `value` (`unknown`): 設定する値。
### 戻り値
(`T`): 修正されたオブジェクトを返します。T を指定しない場合は unknown です。
## 例
```typescript
import { set } from 'es-toolkit/compat';
// ネストされたオブジェクトに値を設定
const obj = { a: { b: { c: 3 } } };
set(obj, 'a.b.c', 4);
console.log(obj.a.b.c); // 4
// 配列に値を設定
const arr = [1, 2, 3];
set(arr, 1, 4);
console.log(arr[1]); // 4
// 存在しないパスを作成して値を設定
const obj2 = {};
set(obj2, 'a.b.c', 4);
console.log(obj2); // { a: { b: { c: 4 } } }
// インターフェースの使用
interface O {
a: number;
}
const obj3 = {};
const result = set<O>(obj3, 'a', 1); // result の型 = { a: number }
console.log(result); // { a: 1 }
```

View File

@ -0,0 +1,46 @@
# isArguments
::: info
この関数は互換性のために `es-toolkit/compat` からのみインポートできます。代替可能なネイティブ JavaScript API が存在するか、まだ十分に最適化されていないためです。
`es-toolkit/compat` からこの関数をインポートすると、[lodash と完全に同じように動作](../../../compatibility.md)します。
:::
与えられた値が `arguments` オブジェクトかどうかを確認します。
この関数は、与えられた値が `arguments` オブジェクトであれば `true`、そうでなければ `false` を返します。
TypeScript の型ガードとして使用できます。パラメータとして与えられた値の型を `IArguments` に絞り込みます。
## インターフェース
```typescript
function isArguments(value?: unknown): value is IArguments;
```
### パラメータ
- `value` (`unknown`): `arguments` オブジェクトかどうかを確認する値です。
### 戻り値
(`value is IArguments`): 与えられた値が `arguments` オブジェクトであれば `true`、そうでなければ `false` を返します。
## 例
```typescript
import { isArguments } from 'es-toolkit/predicate';
const args = (function () {
return arguments;
})();
const strictArgs = (function () {
'use strict';
return arguments;
})();
const value = [1, 2, 3];
console.log(isArguments(args)); // true
console.log(isArguments(strictArgs)); // true
console.log(isArguments(value)); // false
```

View File

@ -0,0 +1,40 @@
# isArray
::: info
この関数は互換性のために `es-toolkit/compat` からのみインポートできます。代替可能なネイティブ JavaScript API が存在するか、まだ十分に最適化されていないためです。
`es-toolkit/compat` からこの関数をインポートすると、[lodash と完全に同じように動作](../../../compatibility.md)します。
:::
与えられた値が配列かどうかを確認します。
この関数は、与えられた値が配列かどうかを確認します。
値が配列であれば `true`、そうでなければ `false` を返します。
TypeScript の型ガードとしてよく使用され、パラメータとして与えられた値を配列型に絞り込むことができます。
## インターフェース
```typescript
function isArray(value?: unknown): value is any[];
```
### パラメータ
- `value` (`unknown`): 配列かどうかを確認する値。
### 戻り値
(`value is any[]`): 値が配列であれば `true`、そうでなければ `false`
## 例
```typescript
const value1 = [1, 2, 3];
const value2 = 'abc';
const value3 = () => {};
console.log(isArray(value1)); // true
console.log(isArray(value2)); // false
console.log(isArray(value3)); // false
```

View File

@ -0,0 +1,40 @@
# isArrayLike
::: info
この関数は互換性のために `es-toolkit/compat` からのみインポートできます。代替となるネイティブ JavaScript API が存在するか、まだ十分に最適化されていないためです。
`es-toolkit/compat` からこの関数をインポートすると、[lodash と完全に同じように動作](../../../compatibility.md)します。
:::
与えられた値が配列のようなオブジェクトかどうかを確認します。
配列のようなオブジェクトは、`null` でも `undefined` でも関数でもなく、`length` プロパティが有効な長さを持つオブジェクトです。
TypeScript の型ガードとして使用できます。パラメータとして与えられた値の型を `ArrayLike<unknown>` に絞り込みます。
## インターフェース
```typescript
function isArrayLike(value: unknown): value is ArrayLike<unknown>;
```
### パラメータ
- `value` (`unknown`): 配列のようなオブジェクトかどうかを確認する値です。
### 戻り値
(`value is ArrayLike<unknown>`): 与えられた値がArrayLikeオブジェクトであれば `true`、そうでなければ `false` を返します。
## 例
```typescript
import { isArrayLike } from 'es-toolkit/predicate';
console.log(isArrayLike([1, 2, 3])); // true
console.log(isArrayLike('abc')); // true
console.log(isArrayLike({ 0: 'a', length: 1 })); // true
console.log(isArrayLike({})); // false
console.log(isArrayLike(null)); // false
console.log(isArrayLike(undefined)); // false
```

View File

@ -0,0 +1,59 @@
# isMatch
::: info
この関数は互換性のために `es-toolkit/compat` からのみインポートできます。代替可能なネイティブ JavaScript API が存在するか、まだ十分に最適化されていないためです。
`es-toolkit/compat` からこの関数をインポートすると、[lodash と完全に同じように動作](../../../compatibility.md)します。
:::
`target``source` の形状と値に一致するかどうかを確認します。オブジェクト、配列、`Map`、`Set` の深い比較をサポートしています。
## インターフェース
```typescript
function isMatch(target: unknown, source: unknown): boolean;
```
## パラメータ
- `target` (`unknown`): 形状と値が一致するかどうかを確認する値。
- `source` (`unknown`): 確認する形状と値を持つオブジェクト。
## 戻り値
- (`boolean`): `target``source` の形状と値に一致する場合は `true`。そうでない場合は `false`
## 例
### オブジェクトの一致
```typescript
isMatch({ a: 1, b: 2 }, { a: 1 }); // true
```
### 配列の一致
```typescript
isMatch([1, 2, 3], [1, 2, 3]); // true
isMatch([1, 2, 2, 3], [2, 2]); // true
isMatch([1, 2, 3], [2, 2]); // false
```
### `Map` の一致
```typescript
const targetMap = new Map([
['key1', 'value1'],
['key2', 'value2'],
]);
const sourceMap = new Map([['key1', 'value1']]);
isMatch(targetMap, sourceMap); // true
```
### `Set` の一致
```javascript
const targetSet = new Set([1, 2, 3]);
const sourceSet = new Set([1, 2]);
isMatch(targetSet, sourceSet); // true
```

View File

@ -0,0 +1,45 @@
# isObjectLike
::: info
この関数は互換性のために `es-toolkit/compat` からのみインポートできます。代替可能なネイティブ JavaScript API があるか、まだ十分に最適化されていないためです。
`es-toolkit/compat` からこの関数をインポートすると、[lodash と完全に同じように動作](../../../compatibility.md)します。
:::
与えられた値がオブジェクトのようであるかを確認します。
オブジェクトのような値とは、`typeof` 演算の結果が `'object'` で、`null` ではない値のことを指します。
TypeScript の型ガードとして使用できます。パラメータとして与えられた値の型をオブジェクトのような値に絞り込みます。
## インターフェース
```typescript
export function isObjectLike(value: unknown): value is object;
```
### パラメータ
- `value` (`T`): オブジェクトのようであるかを確認する値です。
### 戻り値
(`value is object`): 与えられた値がオブジェクトのようであれば `true`、そうでなければ `false` を返します。
## 例
```typescript
import { isObjectLike } from 'es-toolkit/predicate';
const value1 = { a: 1 };
const value2 = [1, 2, 3];
const value3 = 'abc';
const value4 = () => {};
const value5 = null;
console.log(isObjectLike(value1)); // true
console.log(isObjectLike(value2)); // true
console.log(isObjectLike(value3)); // false
console.log(isObjectLike(value4)); // false
console.log(isObjectLike(value5)); // false
```

View File

@ -0,0 +1,53 @@
# matches
::: info
この関数は互換性のために `es-toolkit/compat` からのみインポートできます。代替可能なネイティブ JavaScript API があるか、まだ十分に最適化されていないためです。
`es-toolkit/compat` からこの関数をインポートすると、[lodash と完全に同じように動作](../../../compatibility.md)します。
:::
`source` の形と値と一致するかどうかを確認する関数を作成します。
オブジェクト、配列、`Map`、`Set` との深い比較をサポートします。
この関数の動作は [isMatch](./isMatch.md) と同じで、呼び出し方法のみが異なります。
## インターフェース
```typescript
function matches(source: unknown): (target: unknown) => boolean;
```
## パラメータ
- `source` (`unknown`): 確認する関数が参照するオブジェクト。
## 戻り値
- (`(target: unknown) => boolean`): `source` の形と値と一致するかどうかを確認する関数。`target` が `source` と一致すると `true`、さもなくば `false` を返します。
## 例
### オブジェクトの一致
```typescript
const matcher = matches({ a: 1, b: 2 });
matcher({ a: 1, b: 2, c: 3 }); // true
matcher({ a: 1, c: 3 }); // false
```
### 配列の一致
```typescript
const arrayMatcher = matches([1, 2, 3]);
arrayMatcher([1, 2, 3, 4]); // true
arrayMatcher([4, 5, 6]); // false
```
### ネストされた構造の一致
```typescript
// Matching objects with nested structures
const nestedMatcher = matches({ a: { b: 2 } });
nestedMatcher({ a: { b: 2, c: 3 } }); // true
nestedMatcher({ a: { c: 3 } }); // false
```

View File

@ -0,0 +1,45 @@
# matchesProperty
::: info
この関数は互換性のために `es-toolkit/compat` からのみインポートできます。代替可能なネイティブ JavaScript API が存在するか、まだ十分に最適化されていないためです。
`es-toolkit/compat` からこの関数をインポートすると、[lodash と完全に同じように動作](../../../compatibility.md)します。
:::
与えられたオブジェクトのプロパティが `source` の形状と値に一致するかどうかを確認する関数を作成します。
返される関数は `target` オブジェクトを受け取り、指定されたプロパティの値が `source` と一致するかどうかを確認します。
## インターフェース
```typescript
function matchesProperty(property: PropertyKey | PropertyKey[], source: unknown): (target?: unknown) => boolean;
```
## パラメータ
- `property` (`number | string | symbol | Array<number | string | symbol>`): オブジェクトのプロパティを表すパス。プロパティ名、プロパティ名の配列、または深いパスを表す文字列を使用できます。
- `source` (`unknown`): オブジェクトのプロパティと比較する値。
## 戻り値
- (`(target: unknown) => boolean`): `target` オブジェクトを受け取り、指定されたプロパティの値を取得し、`source` と一致するかどうかを確認する関数。一致する場合は `true`、そうでない場合は `false` を返します。
## 例
```typescript
// 単純なプロパティ名
const checkName = matchesProperty('name', 'Alice');
console.log(checkName({ name: 'Alice' })); // true
console.log(checkName({ name: 'Bob' })); // false
// プロパティの配列
const checkNested = matchesProperty(['address', 'city'], '東京');
console.log(checkNested({ address: { city: '東京' } })); // true
console.log(checkNested({ address: { city: '大阪' } })); // false
// 深いパス
const checkNested = matchesProperty('address.city', '東京');
console.log(checkNested({ address: { city: '東京' } })); // true
console.log(checkNested({ address: { city: '大阪' } })); // false
```

View File

@ -0,0 +1,36 @@
# endsWith
::: info
この関数は互換性のために `es-toolkit/compat` からのみインポートできます。代替可能なネイティブ JavaScript API が存在するか、まだ十分に最適化されていないためです。
`es-toolkit/compat` からこの関数をインポートすると、[lodash と完全に同じように動作](../../../compatibility.md)します。
:::
文字列が指定された文字列で終わるかどうかを確認します。検索を終了するインデックスを指定することができます。
## インターフェース
```typescript
function endsWith(str: string, target: string, position: number = 0): boolean;
```
### パラメータ
- `str` (`string`): 検索する文字列。
- `target` (`string`): 終わりに一致すべき文字列。
- `position` (`number`, オプション): 検索を終了するインデックス。
### 戻り値
(`boolean`): 文字列が指定された文字列で終わるかどうか。
## 例
```typescript
import { endsWith } from 'es-toolkit/compat';
endsWith('fooBar', 'foo'); // false を返す
endsWith('fooBar', 'Bar'); // true を返す
endsWith('fooBar', 'abcdef'); // false を返す
endsWith('fooBar', 'Bar', 3); // false を返す
```

View File

@ -0,0 +1,35 @@
# padEnd
::: info
この関数は互換性のために `es-toolkit/compat` からのみインポートできます。代替可能なネイティブ JavaScript API が存在するか、まだ十分に最適化されていないためです。
`es-toolkit/compat` からこの関数をインポートすると、[lodash と完全に同じように動作](../../../compatibility.md)します。
:::
文字列を指定された長さになるまで末尾に文字を追加して拡張します。
すでに文字列が十分に長いか、末尾に追加する文字が空文字列の場合、何も動作しません。
## インターフェース
```typescript
function padEnd(str: string, length = 0, chars = ' '): string;
```
## パラメータ
- `str` (`string`): 長さを拡張する文字列。
- `length` (`number`): 拡張したい長さ。デフォルト値は `0`
- `char` (`string`): 長さを拡張する際に追加する文字。デフォルト値は `' '`
## 戻り値
指定された長さまで拡張され、末尾に文字が追加された文字列。
## 例
```javascript
padEnd('hello', 10, 'a'); // 'helloaaaaa'
padEnd('hello', 3, 'a'); // 'hello'
padEnd('hello', 5, ''); // 'hello'
```

View File

@ -0,0 +1,35 @@
# padStart
::: info
この関数は互換性のために `es-toolkit/compat` からのみインポートできます。代替可能なネイティブ JavaScript API があるか、まだ十分に最適化されていないためです。
`es-toolkit/compat` からこの関数をインポートすると、[lodash と完全に同じように動作](../../../compatibility.md)します。
:::
文字列を指定された長さになるまで、先頭に文字を追加して拡張します。
すでに文字列が十分に長いか、先頭に追加する文字が空文字列の場合は、何も動作しません。
## インターフェース
```typescript
function padStart(str: string, length = 0, chars = ' '): string;
```
## パラメータ
- `str` (`string`): 長さを拡張する文字列。
- `length` (`number`): 拡張したい長さ。デフォルト値は `0`
- `char` (`string`): 長さを拡張する際に追加する文字。デフォルト値は `' '`
## 戻り値
指定された長さまで拡張され、先頭に文字が追加された文字列。
## 例
```javascript
padStart('hello', 10, 'a'); // 'aaaaahello'
padStart('hello', 3, 'a'); // 'hello'
padStart('hello', 5, ''); // 'hello'
```

View File

@ -0,0 +1,36 @@
# startsWith
::: info
この関数は互換性のために `es-toolkit/compat` からのみインポートできます。代替可能なネイティブ JavaScript API が存在するか、まだ十分に最適化されていないためです。
`es-toolkit/compat` からこの関数をインポートすると、[lodash と完全に同じように動作](../../../compatibility.md)します。
:::
文字列が指定された文字列で始まるかどうかを確認します。検索を開始するインデックスを指定することができます。
## インターフェース
```typescript
function startsWith(str: string, target: string, position: number = 0): boolean;
```
### パラメータ
- `str` (`string`): 検索する文字列。
- `target` (`string`): 開始時に一致すべき文字列。
- `position` (`number`, オプション): 検索を開始するインデックス。
### 戻り値
(`boolean`): 文字列が指定された文字列で始まるかどうか。
## 例
```typescript
import { startsWith } from 'es-toolkit/compat';
startsWith('fooBar', 'foo'); // true を返す
startsWith('fooBar', 'Bar'); // false を返す
startsWith('fooBar', 'abcdef'); // false を返す
startsWith('fooBar', 'Bar', 3); // true を返す
```

View File

@ -0,0 +1,13 @@
# AbortError
操作が中断または取り消された時にスローされるエラーです。
[debounce](../function/debounce.md)や[delay](../promise/delay.md)などの操作が`AbortSignal`によってキャンセルされた時にスローされます。
## インターフェース
```typescript
class AbortError extends Error {
name = 'AbortError',
}
```

View File

@ -0,0 +1,13 @@
# TimeoutError
制限時間が過ぎたときに投げられるエラーです。
[timeout](../promise/timeout.md)や[withTimeout](../promise/withTimeout.md)のような操作の制限時間が過ぎたときに投げられます。
## インターフェース
```typescript
class TimeoutError extends Error {
name = 'TimeoutError',
}
```

View File

@ -0,0 +1,47 @@
# after
`n`回目の呼び出しから実行される関数を生成します。
提供された関数は`n`回目の呼び出しから実行されます。
これは、特定の回数の呼び出し後にのみ動作が発生する必要があるイベントや非同期タスクに有用です。
## インターフェース
```typescript
function after<F extends (...args: any[]) => any>(n: number, func: F): F;
```
### パラメータ
- `n` (`number`): `func`が実行されるために必要な呼び出し回数です。
- `func` (`F`): 実行される関数です。
### 戻り値
(`F`): 新しい関数を返します。この関数は以下の機能を持ちます:
- 呼び出された回数を追跡します。
- `n`回目の呼び出しから`func`を呼び出します。
- 呼び出しが`n`回に達するまで`undefined`を返します。
### エラー
`n`が負の場合、エラーを発生させます。
## 例
```typescript
import { after } from 'es-toolkit/function';
const mockFn = () => {
console.log('実行されました');
};
const afterFn = after(3, mockFn);
// 何もログに出力しません
afterFn();
// 何もログに出力しません
afterFn();
// '実行されました'をログに出力します
afterFn();
```

View File

@ -0,0 +1,34 @@
# ary
最大`n`個までの引数を受け取る新しい関数を作成します。それ以上の引数は無視されます。
## インターフェース
```typescript
function ary<F extends (...args: any[]) => any>(func: F, n: number): (...args: any[]) => ReturnType<F>;
```
### パラメータ
- `func` (`F`): 引数の受け取りを制限する関数。
- `n` (`number`, オプション): 受け取る引数の最大数。
### 戻り値
(`(...args: any[]) => ReturnType<F>`): 受け取れる引数の数が制限された関数。
## 例
```typescript
import { ary } from 'es-toolkit/function';
function fn(a, b, c) {
console.log(arguments);
}
ary(fn, 2)(1, 2, 3); // [Arguments] { '0': 1, '1': 2 }
ary(fn); // [Arguments] { '0': 1, '1': 2, '2': 3 }
ary(fn, -1); // [Arguments] {}
ary(fn, 1.5); // [Arguments] { '0': 1 }
ary(fn, 2, {}); // [Arguments] { '0': 1, '1': 2, '2': 3 }
```

View File

@ -0,0 +1,46 @@
# before
指定された関数(`func`)の呼び出し回数を制限する新しい関数を生成します。
## インターフェース
```typescript
function before<F extends (...args: any[]) => any>(n: number, func: F): F;
```
### パラメータ
- `n` (`number`): 返される関数が `func` を呼び出すまでに許可される呼び出し回数です。
- `n` が 0 の場合、`func` は呼び出されません。
- `n` が正の整数の場合、`func` は最大 `n-1` 回呼び出されます。
- `func` (`F`): 呼び出し回数制限が適用される関数です。
### 戻り値
(`F`): 新しい関数を返します。この関数は以下の機能を持ちます:
- 呼び出し回数を追跡します。
- `n-1` 回目の呼び出しまで `func` を呼び出します。
- 呼び出し回数が `n` に達するか超えると、`undefined` を返して関数呼び出しを停止します。
### エラー
`n` が負の数の場合、エラーが発生します。
## 例
```typescript
import { after } from 'es-toolkit/function';
const mockFn = () => {
console.log('実行されました');
};
const afterFn = after(3, mockFn);
// 何もログに出力されません
afterFn();
// 何もログに出力されません
afterFn();
// '実行されました' がログに出力されます
afterFn();
```

View File

@ -0,0 +1,62 @@
# debounce
提供された関数の呼び出しを遅延させるデバウンスされた関数を生成します。
デバウンスされた関数は、最後に呼び出されてから `debounceMs` ミリ秒が経過した後に呼び出されます。
デバウンスされた関数は、保留中の実行をキャンセルする `cancel` メソッドも持っています。
## インターフェース
```typescript
function debounce<F extends (...args: any[]) => void>(
func: F,
debounceMs: number,
options?: DebounceOptions
): F & { cancel: () => void };
```
### パラメータ
- `func` (`F`): デバウンスされた関数を作成する関数。
- `debounceMs`(`number`): デバウンスで遅延させるミリ秒。
- `options` (`DebounceOptions`, オプション): オプションオブジェクト。
- `signal` (`AbortSignal`, オプション): デバウンスされた関数をキャンセルするためのオプションの `AbortSignal`
### 戻り値
(`F & { cancel: () => void }`): `cancel` メソッドを持つデバウンスされた関数。
## 例
### 基本的な使用法
```typescript
const debouncedFunction = debounce(() => {
console.log('実行されました');
}, 1000);
// 1秒以内に再度呼び出されなければ、'実行されました'をログに記録します
debouncedFunction();
// 前回の呼び出しがキャンセルされたため、何もログに記録しません
debouncedFunction.cancel();
```
### AbortSignalの使用法
```typescript
const controller = new AbortController();
const signal = controller.signal;
const debouncedWithSignalFunction = debounce(
() => {
console.log('関数が実行されました');
},
1000,
{ signal }
);
// 1秒以内に再度呼び出されなければ、'関数が実行されました'をログに記録します
debouncedWithSignalFunction();
// デバウンス関数の呼び出しをキャンセルします
controller.abort();
```

View File

@ -0,0 +1,89 @@
# memoize
計算結果をキャッシュする新しいメモ化された関数を返します。メモ化された関数は、同じ引数に対して重複して計算せず、キャッシュされた結果を返します。
引数を0個または1個だけ受け取る関数のみメモ化できます。2つ以上の引数を受け取る関数をメモ化するには、
複数の引数を1つのオブジェクトや配列として受け取るようにリファクタリングしてください。
引数が配列やオブジェクトで、プリミティブ値でない場合、正しくキャッシュキーを計算できるように`getCacheKey`関数をオプションとして提供してください。
## インターフェース
```typescript
function memoize<F extends (...args: any) => any>(
fn: F,
options: {
cache?: MemoizeCache<any, ReturnType<F>>;
getCacheKey?: (args: Parameters<F>[0]) => unknown;
} = {}
): F & { cache: MemoizeCache<any, ReturnType<F>> };
interface MemoizeCache<K, V> {
set(key: K, value: V): void;
get(key: K): V | undefined;
has(key: K): boolean;
delete(key: K): boolean | void;
clear(): void;
size: number;
}
```
### パラメータ
- `fn` (`F`) - メモ化する関数。0個または1個の引数を受け取る必要があります。
- `options`: メモ化オプション。
- `options.cache` (`MemoizeCache<any, ReturnType<F>>`): 計算結果を保存するキャッシュオブジェクト。デフォルト値は新しい`Map`です。
- `options.getCacheKey` (`(args: A) => unknown`): プリミティブ値でない引数に対してキャッシュキーを正しく計算できる関数。
### 戻り値
(`F & { cache: MemoizeCache<any, ReturnType<F>> }`): メモ化された関数。さらに内部キャッシュを公開する`cache`プロパティを持ちます。
## 例
```typescript
import { memoize, MemoizeCache } from 'es-toolkit/function';
// 基本的な使用法
const add = (x: number) => x + 10;
const memoizedAdd = memoize(add);
console.log(memoizedAdd(5)); // 15
console.log(memoizedAdd(5)); // 15 (キャッシュされた結果)
console.log(memoizedAdd.cache.size); // 1
// カスタム`getCacheKey`の定義
const sum = (arr: number[]) => arr.reduce((x, y) => x + y, 0);
const memoizedSum = memoize(sum, { getCacheKey: (arr: number[]) => arr.join(',') });
console.log(memoizedSum([1, 2])); // 3
console.log(memoizedSum([1, 2])); // 3 (キャッシュされた結果)
console.log(memoizedSum.cache.size); // 1
// カスタム`MemoizeCache`の定義
class CustomCache<K, T> implements MemoizeCache<K, T> {
private cache = new Map<K, T>();
set(key: K, value: T): void {
this.cache.set(key, value);
}
get(key: K): T | undefined {
return this.cache.get(key);
}
has(key: K): boolean {
return this.cache.has(key);
}
delete(key: K): boolean {
return this.cache.delete(key);
}
clear(): void {
this.cache.clear();
}
get size(): number {
return this.cache.size;
}
}
const customCache = new CustomCache<string, number>();
const memoizedSumWithCustomCache = memoize(sum, { cache: customCache });
console.log(memoizedSumWithCustomCache([1, 2])); // 3
console.log(memoizedSumWithCustomCache([1, 2])); // 3 (キャッシュされた結果)
console.log(memoizedAddWithCustomCache.cache.size); // 1
```

View File

@ -0,0 +1,26 @@
# negate
真偽を返す関数 `func` の実行結果を反対に変更します。
## インターフェース
```typescript
function negate<F extends (...args: never[]) => boolean>(func: F): F;
```
### パラメータ
- `func` (`F extends (args: ...Parameters) => unknown`): 戻り値を反対に変更する関数。
### 戻り値
- (`F`): 戻り値が反対に変更された関数。
## 例
```typescript
import { negate } from 'es-toolkit/function';
negate(() => true)(); // 'false' を返す
negate(() => false)(); // 'true' を返す
```

View File

@ -0,0 +1,28 @@
# noop
何もしない関数です。関数が必要な場所で空欄を埋めるために使用したり、デフォルト値として使用したりできます。
## インターフェース
```typescript
function noop(): void;
```
### 戻り値
(`void`): この関数は何も返しません。
## 例
```typescript
import { noop } from 'es-toolkit/function';
interface Props {
onChange?: () => void;
}
function MyComponent({ onChange = noop }: Props) {
// ここでonChangeはundefinedにならないので、自由に呼び出せます。
onChange();
}
```

View File

@ -0,0 +1,30 @@
# once
提供された関数 `func` を一度だけ呼び出すように制限する関数を生成します。
関数を繰り返し呼び出すと、最初の呼び出しの値を返します。
## インターフェース
```typescript
function once<F extends () => any>(func: F): F;
```
### パラメータ
- `func` (`F extends () => any`): 一度だけ呼び出すように制限する関数です。
### 戻り値
(`F`): `func` が一度呼び出されると結果をキャッシュして返す新しい関数です。
## 例
```typescript
const initialize = once(() => {
console.log('初期化');
return true;
});
initialize(); // '初期化'をログに出力し、trueを返します
initialize(); // ログ出力なしでtrueを返します
```

View File

@ -0,0 +1,47 @@
# partial
引数を前もって提供した関数を作成します。
[bind](../compat/function/bind.md)と動作が似ていますが、`this`を固定しないという違いがあります。
Symbol型の`partial.placeholder`を使用すると、前もって提供した引数が使用される位置を決定できます。
関数の`length`プロパティは設定しません。
## インターフェース
```typescript
function partial<F extends (...args: any[]) => any>(func: F, ...partialArgs: any[]): F;
namespace partial {
placeholder: symbol;
}
```
### パラメータ
- `func` (`F`): 前もって引数を提供する関数。
- `partialArgs` (`any[]`, オプション): 前もって提供される引数。
### 戻り値
(`F`): 前もって引数が提供された関数。
## 例
```typescript
import { partial } from 'es-toolkit/function';
function greet(greeting, name) {
return greeting + ' ' + name;
}
const sayHelloTo = partial(greet, 'hello');
sayHelloTo('fred');
// => 'hello fred'
// プレースホルダーを使用して部分適用
const greetFred = partial(greet, partial.placeholder, 'fred');
greetFred('hi');
// => 'hi fred'
```

View File

@ -0,0 +1,47 @@
# partialRight
引数を後ろから事前に提供した関数を作成します。
[partial](./partial.md)と動作が似ていますが、引数を後ろから提供するという違いがあります。
Symbol型の`partialRight.placeholder`を使用すると、事前に提供した引数が使用される位置を決定できます。
関数の`length`プロパティは設定しません。
## インターフェース
```typescript
function partialRight<F extends (...args: any[] => any)>(func: F, ...partialArgs: any[]): F;
namespace partialRight {
placeholder: symbol;
}
```
### パラメータ
- `func` (`F`): 事前に引数を提供する関数。
- `partialArgs` (`any[]`, オプション): 事前に提供される引数。
### 戻り値
(`F`): 事前に引数が提供された関数。
## 例
```typescript
import { partialRight } from 'es-toolkit/function';
function greet(greeting, name) {
return greeting + ' ' + name;
}
const greetFred = partialRight(greet, 'fred');
greetFred('hi');
// => 'hi fred'
// プレースホルダーを使用して部分適用
const sayHelloTo = partialRight(greet, 'hello', partialRight.placeholder);
sayHelloTo('fred');
// => 'hello fred'
```

View File

@ -0,0 +1,38 @@
# rest
与えられた関数 `func` に対して、特定のインデックスから引数を配列にまとめて渡す新しい関数を作成します。
特定のインデックス以前の引数は個別に渡され、それ以降の引数は配列として一括で渡されます。
## インターフェース
```typescript
function rest<F extends (...args: any[]) => any>(func: F, startIndex: number): (...args: any[]) => ReturnType<F>;
```
### パラメータ
- `func` (`F`): 引数の受け取り方を変更する関数。
- `startIndex` (`number`, オプション): 引数をまとめて渡し始めるインデックス。デフォルト値は `func.length - 1` で、最後のパラメータから配列にまとめて渡します。
### 戻り値
(`(...args: any[]) => ReturnType<F>`): 特定のインデックスからの引数を配列にまとめて `func` に渡す新しい関数。
## 例
```typescript
function fn(a, b, c) {
return Array.from(arguments);
}
// デフォルトでは最後の引数から配列にまとめて渡します
const func1 = rest(fn);
console.log(func1(1, 2, 3, 4)); // [1, 2, [3, 4]]
// 2番目の引数から配列にまとめて渡します
const func2 = rest(fn, 1);
console.log(func2(1, 2, 3, 4)); // [1, [2, 3, 4]]
// 引数が不足している場合
console.log(func1(1)); // [1, undefined, []]
```

View File

@ -0,0 +1,37 @@
# throttle
提供された関数を `throttleMs` ミリ秒ごとに最大1回だけ呼び出すスロットル化された関数を生成します。時間内にスロットル化された関数を再度呼び出しても、元の関数は実行されません。
## インターフェース
```typescript
function throttle<F extends (...args: any[]) => void>(func: F, throttleMs: number): F;
```
### パラメータ
- `func` (`F`): スロットル化する関数。
- `throttleMs`(`number`): 実行をスロットル化するミリ秒。
### 戻り値
(`F`): 新しいスロットル化された関数。
## 例
```typescript
const throttledFunction = throttle(() => {
console.log('呼び出し');
}, 1000);
// すぐに '呼び出し' をログに記録します
throttledFunction();
// スロットル時間内なので何もログに記録しません
throttledFunction();
// 1秒後
setTimeout(() => {
throttledFunction(); // '呼び出し' をログに記録します
}, 1000);
```

View File

@ -0,0 +1,29 @@
# unary
最大1つの引数だけを受け取る新しい関数を作成します。それ以上の引数は無視されます。
## インターフェース
```typescript
function unary<F extends (...args: any[]) => any>(func: F): (...args: any[]) => ReturnType<F>;
```
### パラメータ
- `func` (`F`): 引数を1つだけ受け取るようにする関数
### 戻り値
(`(...args: any[]) => ReturnType<F>`): 最大1つの引数だけを受け取るようにした関数
## 例
```typescript
import { unary } from 'es-toolkit/function';
function fn(a, b, c) {
console.log(arguments);
}
unary(fn)(1, 2, 3); // [Arguments] { '0': 1 }
```

Some files were not shown because too many files have changed in this diff Show More