Skip to content

Pull Method

The pull() method removes and returns an item from the collection by its key. The original collection is modified in the process.

Basic Syntax

typescript
collect(items).pull(key: string | number)

Examples

Basic Usage

typescript
import { collect } from 'ts-collect'

// With arrays
const numbers = collect([1, 2, 3, 4, 5])
const pulled = numbers.pull(2) // Pull item at index 2

console.log(pulled) // 3
console.log(numbers.all()) // [1, 2, 4, 5]

// With objects
const data = collect({ name: 'John', age: 30, city: 'New York' })
const age = data.pull('age')

console.log(age) // 30
console.log(data.all()) // { name: 'John', city: 'New York' }

Working with Complex Types

typescript
interface User {
  id: number
  name: string
  role: string
}

const users = collect<User>([
  { id: 1, name: 'John', role: 'admin' },
  { id: 2, name: 'Jane', role: 'user' },
  { id: 3, name: 'Bob', role: 'user' }
])

const secondUser = users.pull(1) // Pull index 1
console.log(secondUser) // { id: 2, name: 'Jane', role: 'user' }
console.log(users.all()) // [{ id: 1, ... }, { id: 3, ... }]

Real-world Examples

Task Queue Management

typescript
interface Task {
  id: string
  type: string
  priority: number
  data: any
}

class TaskQueue {
  private tasks: Collection<Task>

  constructor() {
    this.tasks = collect<Task>([])
  }

  addTask(task: Task) {
    this.tasks.push(task)
  }

  pullTask(taskId: string): Task | undefined {
    const index = this.tasks.findIndex(task => task.id === taskId)
    if (index !== -1) {
      return this.tasks.pull(index)
    }
    return undefined
  }

  getRemaining(): number {
    return this.tasks.count()
  }
}

// Usage
const queue = new TaskQueue()
queue.addTask({
  id: 'task1',
  type: 'email',
  priority: 1,
  data: { to: 'user@example.com' }
})

const pulledTask = queue.pullTask('task1')

Shopping Cart

typescript
interface CartItem {
  id: string
  name: string
  price: number
  quantity: number
}

class ShoppingCart {
  private items: Collection<CartItem>

  constructor() {
    this.items = collect<CartItem>([])
  }

  addItem(item: CartItem) {
    this.items.push(item)
  }

  removeItem(index: number): CartItem | undefined {
    return this.items.pull(index)
  }

  getTotal(): number {
    return this.items.sum(item => item.price * item.quantity)
  }
}

Advanced Usage

State Management

typescript
interface State {
  key: string
  value: any
  timestamp: number
}

class StateManager {
  private states: Collection<State>

  constructor() {
    this.states = collect<State>([])
  }

  setState(key: string, value: any) {
    this.states.push({
      key,
      value,
      timestamp: Date.now()
    })
  }

  removeState(index: number): State | undefined {
    const state = this.states.pull(index)
    console.log(`State removed at ${new Date().toISOString()}`)
    return state
  }

  getStates(): State[] {
    return this.states.all()
  }
}

Document Management

typescript
interface Document {
  id: string
  title: string
  content: string
  metadata: {
    created: Date
    modified: Date
    version: number
  }
}

class DocumentManager {
  private documents: Collection<Document>

  constructor() {
    this.documents = collect<Document>([])
  }

  addDocument(doc: Document) {
    this.documents.push(doc)
  }

  archiveDocument(index: number): Document | undefined {
    const doc = this.documents.pull(index)
    if (doc) {
      console.log(`Document ${doc.id} archived`)
      // Additional archiving logic here
    }
    return doc
  }
}

Type Safety

typescript
interface TypedItem {
  id: number
  value: string
  optional?: boolean
}

const items = collect<TypedItem>([
  { id: 1, value: 'first' },
  { id: 2, value: 'second', optional: true }
])

// Type-safe pull operation
const item: TypedItem | undefined = items.pull(0)
if (item) {
  console.log(item.id) // TypeScript knows this is safe
  console.log(item.value) // TypeScript knows this is safe
  console.log(item.optional) // TypeScript knows this is optional
}

Return Value

  • Returns the removed item from the collection
  • Returns undefined if the key doesn't exist
  • Modifies the original collection by removing the item
  • For arrays, removes the item at the specified index
  • For objects, removes the item with the specified key

Released under the MIT License.