# reduceRight (Lodash 互換性)

::: warning `Array.prototype.reduceRight`または`Object.values`と`reduceRight`を使用してください

この`reduceRight`関数は、複雑な型処理と様々な入力形式のサポートにより、動作が遅くなります。

代わりに、より高速で現代的な`Array.prototype.reduceRight`メソッド、またはオブジェクトの場合は`Object.values`と`reduceRight`を一緒に使用してください。

:::

配列またはオブジェクトを右から左へ反復処理して1つの値に縮小します。

```typescript
const result = reduceRight(collection, iteratee, initialValue);
```

## 使用法

### `reduceRight(collection, iteratee, initialValue)`

配列またはオブジェクトのすべての要素を右から左へ反復処理しながら累積値を計算します。初期値を提供するとその値から始まり、そうでない場合は最後の要素から始まります。

```typescript
import { reduceRight } from 'es-toolkit/compat';

// 配列を文字列に結合(右から)
const letters = ['a', 'b', 'c', 'd'];
const result = reduceRight(letters, (acc, value) => acc + value, '');
console.log(result); // 'dcba'

// オブジェクト値の乗算(キー順序の逆)
const numbers = { x: 2, y: 3, z: 4 };
const product = reduceRight(numbers, (acc, value) => acc * value, 1);
console.log(product); // 24 (1 * 4 * 3 * 2)
```

初期値を提供しない場合、最後の要素が初期値となり、後ろから2番目の要素から反復処理を開始します。

```typescript
import { reduceRight } from 'es-toolkit/compat';

const numbers = [1, 2, 3, 4];
const sum = reduceRight(numbers, (acc, value) => acc + value);
console.log(sum); // 10 (4 + 3 + 2 + 1)

// 空の配列はundefinedを返します
const empty = [];
const result = reduceRight(empty, (acc, value) => acc + value);
console.log(result); // undefined
```

#### パラメータ

- `collection` (`T[] | ArrayLike<T> | Record<string, T> | null | undefined`): 反復処理する配列またはオブジェクトです。
- `iteratee` (`(accumulator: any, value: any, index: PropertyKey, collection: any) => any`): 各要素に対して呼び出す関数です。累積値、現在の値、インデックス/キー、元の配列/オブジェクトを受け取ります。
- `initialValue` (`any`, オプション): 累積値の初期値です。提供しない場合、最後の要素が初期値になります。

#### 戻り値

(`any`): すべての要素を処理した後の最終累積値を返します。
