cluster
Group an array by specified conditions.
Syntax
typescript
cluster<T>(
array: T[],
key: (item: T) => string | number
): Record<string | number, T[]>
Parameters
array
(T[]): The array to groupkey
((item: T) => string | number): Key extraction function for grouping
Return Value
Record<string | number, T[]>
: Grouped object, keys are grouping conditions, values are corresponding arrays
Examples
Basic Usage
typescript
import { cluster } from 'radash'
const users = [
{ name: 'Alice', age: 25, city: 'New York' },
{ name: 'Bob', age: 30, city: 'Los Angeles' },
{ name: 'Charlie', age: 25, city: 'New York' },
{ name: 'Diana', age: 35, city: 'Los Angeles' }
]
const groupedByCity = cluster(users, user => user.city)
// {
// 'New York': [
// { name: 'Alice', age: 25, city: 'New York' },
// { name: 'Charlie', age: 25, city: 'New York' }
// ],
// 'Los Angeles': [
// { name: 'Bob', age: 30, city: 'Los Angeles' },
// { name: 'Diana', age: 35, city: 'Los Angeles' }
// ]
// }
Group by Age
typescript
import { cluster } from 'radash'
const users = [
{ name: 'Alice', age: 25 },
{ name: 'Bob', age: 30 },
{ name: 'Charlie', age: 25 },
{ name: 'Diana', age: 35 },
{ name: 'Eve', age: 30 }
]
const groupedByAge = cluster(users, user => user.age)
// {
// 25: [
// { name: 'Alice', age: 25 },
// { name: 'Charlie', age: 25 }
// ],
// 30: [
// { name: 'Bob', age: 30 },
// { name: 'Eve', age: 30 }
// ],
// 35: [
// { name: 'Diana', age: 35 }
// ]
// }
Group by Multiple Conditions
typescript
import { cluster } from 'radash'
const products = [
{ name: 'Laptop', category: 'Electronics', price: 999 },
{ name: 'Phone', category: 'Electronics', price: 599 },
{ name: 'Book', category: 'Education', price: 29 },
{ name: 'Tablet', category: 'Electronics', price: 399 }
]
const groupedByCategory = cluster(products, product => product.category)
// {
// 'Electronics': [
// { name: 'Laptop', category: 'Electronics', price: 999 },
// { name: 'Phone', category: 'Electronics', price: 599 },
// { name: 'Tablet', category: 'Electronics', price: 399 }
// ],
// 'Education': [
// { name: 'Book', category: 'Education', price: 29 }
// ]
// }
Group by Price Range
typescript
import { cluster } from 'radash'
const products = [
{ name: 'Laptop', price: 999 },
{ name: 'Phone', price: 599 },
{ name: 'Book', price: 29 },
{ name: 'Tablet', price: 399 },
{ name: 'Watch', price: 199 }
]
const getPriceRange = (price: number) => {
if (price < 100) return 'Budget'
if (price < 500) return 'Mid-range'
return 'Premium'
}
const groupedByPriceRange = cluster(products, product => getPriceRange(product.price))
// {
// 'Budget': [
// { name: 'Book', price: 29 }
// ],
// 'Mid-range': [
// { name: 'Watch', price: 199 },
// { name: 'Tablet', price: 399 }
// ],
// 'Premium': [
// { name: 'Phone', price: 599 },
// { name: 'Laptop', price: 999 }
// ]
// }
Group by Date
typescript
import { cluster } from 'radash'
const events = [
{ title: 'Meeting 1', date: new Date('2023-01-01') },
{ title: 'Meeting 2', date: new Date('2023-01-01') },
{ title: 'Meeting 3', date: new Date('2023-01-02') },
{ title: 'Meeting 4', date: new Date('2023-01-03') }
]
const groupedByDate = cluster(events, event =>
event.date.toISOString().split('T')[0]
)
// {
// '2023-01-01': [
// { title: 'Meeting 1', date: new Date('2023-01-01') },
// { title: 'Meeting 2', date: new Date('2023-01-01') }
// ],
// '2023-01-02': [
// { title: 'Meeting 3', date: new Date('2023-01-02') }
// ],
// '2023-01-03': [
// { title: 'Meeting 4', date: new Date('2023-01-03') }
// ]
// }
Handling Null Values
typescript
import { cluster } from 'radash'
const items = [
{ name: 'Item 1', category: 'A' },
{ name: 'Item 2', category: null },
{ name: 'Item 3', category: 'B' },
{ name: 'Item 4', category: undefined }
]
const groupedByCategory = cluster(items, item => item.category || 'Uncategorized')
// {
// 'A': [
// { name: 'Item 1', category: 'A' }
// ],
// 'B': [
// { name: 'Item 3', category: 'B' }
// ],
// 'Uncategorized': [
// { name: 'Item 2', category: null },
// { name: 'Item 4', category: undefined }
// ]
// }
Notes
- Key Type: Keys must be strings or numbers
- Null Value Handling: Need to manually handle null and undefined values
- Performance: Time complexity is O(n)
- Order: Does not guarantee the order of elements within groups
Differences from Other Functions
cluster
: Group by conditions, returns an objectgroupBy
: Similar functionality, but may have different implementationspartition
: Divides an array into two parts
Performance
- Time Complexity: O(n)
- Space Complexity: O(n)
- Use Cases: Data analysis and statistics