json-eval-rs 0.0.99

High-performance JSON Logic evaluator with schema validation and dependency tracking. Built on blazing-fast Rust engine.
Documentation
---
title: 'Array'
description: "Operator untuk transformasi, penyaringan, dan agregasi data array."
navigation:
  icon: 'i-ph-code-block'
seo:
  title: 'Array'
  description: "Operator untuk transformasi, penyaringan, dan agregasi data array."
---

## Tinjauan

Operator array memungkinkan Anda memanipulasi koleksi data secara fungsional. Anda dapat melakukan transformasi, penyaringan, dan rangkuman data tanpa perlu menulis perulangan manual (imperative loops). Ini sangat membantu dalam mengolah set data yang besar atau kompleks secara efisien.

### Kasus Penggunaan Umum

- **Transformasi**: Mengubah setiap elemen dalam array menjadi bentuk baru dengan `map`.
- **Penyaringan**: Mengambil elemen yang hanya memenuhi kriteria tertentu dengan `filter`.
- **Agregasi**: Menghitung total, rata-rata, atau nilai tunggal dari sebuah array dengan `reduce`.
- **Validasi**: Memeriksa apakah semua, sebagian, atau tidak ada elemen yang memenuhi syarat dengan `all`, `some`, dan `none`.
- **Penggabungan**: Menyatukan beberapa array menjadi satu dengan `merge`.

### Pola Elemen Saat Ini

Saat menggunakan operator yang melakukan iterasi (seperti `map` atau `filter`), Anda dapat merujuk ke elemen yang sedang diproses menggunakan variabel kosong: `{"var": ""}`.

Khusus untuk `reduce`, Anda dapat menggunakan variabel khusus yaitu `accumulator` (hasil akumulasi sementara) dan `current` (elemen saat ini).

---

## `map` - Transformasi Array

Mengaplikasikan logika tertentu ke setiap elemen dalam array dan mengembalikan array baru berisi hasil transformasinya.

### Sintaks
```json
{"map": [array, logic]}
```

### Contoh
```json
// Melipatgandakan nilai dalam array
{"map": [[1, 2, 3], {"*": [{"var": ""}, 2]}]}
// → [2, 4, 6]

// Mengambil nama dari array objek user
{"map": [{"var": "users"}, {"var": "name"}]}
```

---

## `filter` - Penyaringan Array

Hanya menyisakan elemen yang memenuhi kondisi logika tertentu.

### Sintaks
```json
{"filter": [array, condition]}
```

### Contoh
```json
// Mengambil hanya angka genap
{"filter": [[1, 2, 3, 4], {"==": [{"%": [{"var": ""}, 2]}, 0]}]}
// → [2, 4]
```

---

## `reduce` - Akumulasi Array

Mengecilkan array menjadi satu nilai tunggal berdasarkan logika akumulasi.

### Sintaks
```json
{"reduce": [array, logic, initial_value]}
```

### Contoh
```json
// Menjumlahkan semua angka dalam array
{"reduce": [[1, 2, 3], {"+": [{"var": "accumulator"}, {"var": "current"}]}, 0]}
// → 6
```

---

## Operator Validasi (`all`, `some`, `none`)

- **`all`**: Mengembalikan `true` jika **semua** elemen memenuhi kondisi.
- **`some`**: Mengembalikan `true` jika **setidaknya satu** elemen memenuhi kondisi.
- **`none`**: Mengembalikan `true` jika **tidak ada satu pun** elemen yang memenuhi kondisi.

### Contoh
```json
{"all": [[2, 4, 6], {"==": [{"%": [{"var": ""}, 2]}, 0]}]} // → true
{"some": [[1, 2, 3], {">": [{"var": ""}, 2]}]}             // → true
```

---

## `merge` - Penggabungan Array

Menggabungkan beberapa array menjadi satu array yang rata (flat).

### Contoh
```json
{"merge": [[1, 2], [3, 4]]} // → [1, 2, 3, 4]
```

---

## `in` - Cek Keberadaan

Memeriksa apakah suatu nilai ada di dalam array atau string.

### Contoh
```json
{"in": [2, [1, 2, 3]]}       // → true
{"in": ["halo", "halo dunia"]} // → true
```

---

## Praktik Terbaik

1. **Gunakan `map` dan `filter` secara berantai** untuk pengolahan data yang bersih dan deklaratif.
2. **Selalu berikan nilai awal (initial value) pada `reduce`** untuk menghindari hasil yang tidak terduga pada array kosong.
3. **Manfaatkan `in`** untuk validasi sederhana daripada melakukan perulangan manual yang kompleks.