Skip to content

Collapse Method

The collapse() method collapses a collection of arrays into a single, flat collection. This is particularly useful when working with nested arrays or when you need to flatten multi-dimensional array structures.

Basic Syntax

typescript
collect(arrays).collapse()

Examples

Basic Usage

typescript
import { collect } from 'ts-collect'

const collection = collect([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
const collapsed = collection.collapse()

console.log(collapsed.all()) // [1, 2, 3, 4, 5, 6, 7, 8, 9]

Working with Objects

typescript
const users = collect([
  [
    { id: 1, name: 'John' },
    { id: 2, name: 'Jane' }
  ],
  [
    { id: 3, name: 'Bob' },
    { id: 4, name: 'Alice' }
  ]
])

const allUsers = users.collapse()
console.log(allUsers.all())
// [
//   { id: 1, name: 'John' },
//   { id: 2, name: 'Jane' },
//   { id: 3, name: 'Bob' },
//   { id: 4, name: 'Alice' }
// ]

Handling Empty Arrays

typescript
const mixed = collect([
  [1, 2, 3],
  [],
  [4, 5],
  [],
  [6]
])

const result = mixed.collapse()
console.log(result.all()) // [1, 2, 3, 4, 5, 6]

Real-world Examples

Processing Form Data

typescript
interface FormField {
  name: string
  value: string
}

const formSections = collect([
  // Personal Information Section
  [
    { name: 'firstName', value: 'John' },
    { name: 'lastName', value: 'Doe' }
  ],
  // Contact Information Section
  [
    { name: 'email', value: 'john@example.com' },
    { name: 'phone', value: '555-0123' }
  ],
  // Address Section
  [
    { name: 'street', value: '123 Main St' },
    { name: 'city', value: 'Springfield' }
  ]
])

const allFields = formSections.collapse()
console.log(allFields.all())
// [
//   { name: 'firstName', value: 'John' },
//   { name: 'lastName', value: 'Doe' },
//   { name: 'email', value: 'john@example.com' },
//   { name: 'phone', value: '555-0123' },
//   { name: 'street', value: '123 Main St' },
//   { name: 'city', value: 'Springfield' }
// ]

Handling API Responses

typescript
interface Task {
  id: number
  title: string
  completed: boolean
}

// Simulating paginated API responses
const pageResponses = collect([
  // Page 1
  [
    { id: 1, title: 'Task 1', completed: false },
    { id: 2, title: 'Task 2', completed: true }
  ],
  // Page 2
  [
    { id: 3, title: 'Task 3', completed: false },
    { id: 4, title: 'Task 4', completed: true }
  ]
])

const allTasks = pageResponses.collapse()
console.log(allTasks.all())
// [
//   { id: 1, title: 'Task 1', completed: false },
//   { id: 2, title: 'Task 2', completed: true },
//   { id: 3, title: 'Task 3', completed: false },
//   { id: 4, title: 'Task 4', completed: true }
// ]

Combining with Other Methods

typescript
const data = collect([
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
])

// Collapse and then filter even numbers
const evenNumbers = data
  .collapse()
  .filter(num => num % 2 === 0)

console.log(evenNumbers.all()) // [2, 4, 6, 8]

// Collapse and then perform calculations
const sum = data
  .collapse()
  .sum()

console.log(sum) // 45

Type Safety

typescript
// Type-safe collapse with interfaces
interface TodoItem {
  id: number
  task: string
}

const typedArrays = collect<TodoItem[]>([
  [
    { id: 1, task: 'Buy groceries' },
    { id: 2, task: 'Clean house' }
  ],
  [
    { id: 3, task: 'Do laundry' },
    { id: 4, task: 'Walk dog' }
  ]
])

// Collapsed collection maintains type safety
const typedResult = typedArrays.collapse()
// Type is Collection<TodoItem>

// TypeScript knows about the types
typedResult.each((item) => {
  console.log(item.task) // TypeScript knows 'task' exists
})

Nested Arrays with Mixed Types

typescript
const mixed = collect([
  [1, 'a', true],
  [2, 'b', false],
  [3, 'c', true]
])

const collapsed = mixed.collapse()
console.log(collapsed.all()) // [1, 'a', true, 2, 'b', false, 3, 'c', true]

Return Value

Returns a new Collection instance with all nested arrays collapsed into a single-level array.

Note

The collapse() method only flattens one level deep. If you need to flatten deeply nested arrays, you might need to call collapse() multiple times or use a different approach.

Released under the MIT License.