Pop Method
The pop()
method removes and returns the last item from the collection. The original collection is modified in the process.
Basic Syntax
typescript
collect(items).pop()
Examples
Basic Usage
typescript
import { collect } from 'ts-collect'
// Simple array
const numbers = collect([1, 2, 3, 4, 5])
const lastNumber = numbers.pop()
console.log(lastNumber) // 5
console.log(numbers.all()) // [1, 2, 3, 4]
Working with Objects
typescript
interface Task {
id: number
name: string
priority: number
}
const tasks = collect<Task>([
{ id: 1, name: 'Task 1', priority: 1 },
{ id: 2, name: 'Task 2', priority: 2 },
{ id: 3, name: 'Task 3', priority: 3 }
])
const lastTask = tasks.pop()
console.log(lastTask) // { id: 3, name: 'Task 3', priority: 3 }
console.log(tasks.all()) // [{ id: 1, ... }, { id: 2, ... }]
Real-world Examples
Stack Implementation
typescript
class Stack<T> {
private items: Collection<T>
constructor(initialItems: T[] = []) {
this.items = collect<T>(initialItems)
}
push(item: T): void {
this.items.push(item)
}
pop(): T | undefined {
return this.items.pop()
}
peek(): T | undefined {
return this.items.last()
}
isEmpty(): boolean {
return this.items.isEmpty()
}
size(): number {
return this.items.count()
}
}
// Usage
const stack = new Stack<number>([1, 2, 3])
console.log(stack.pop()) // 3
console.log(stack.peek()) // 2
console.log(stack.size()) // 2
Task Queue
typescript
interface QueueTask {
id: string
type: string
data: any
priority: number
}
class TaskQueue {
private tasks: Collection<QueueTask>
constructor() {
this.tasks = collect<QueueTask>([])
}
addTask(task: QueueTask): void {
this.tasks.push(task)
}
processNextTask(): QueueTask | undefined {
// Sort by priority before processing
this.tasks = this.tasks.sortByDesc('priority')
return this.tasks.pop()
}
hasTasks(): boolean {
return !this.tasks.isEmpty()
}
}
// Usage
const queue = new TaskQueue()
queue.addTask({
id: '1',
type: 'email',
data: { to: 'user@example.com' },
priority: 2
})
queue.addTask({
id: '2',
type: 'notification',
data: { message: 'Alert' },
priority: 1
})
const nextTask = queue.processNextTask()
Advanced Usage
Undo History
typescript
interface HistoryState {
timestamp: number
action: string
data: any
}
class UndoManager {
private history: Collection<HistoryState>
private maxHistory: number
constructor(maxHistory: number = 10) {
this.history = collect<HistoryState>([])
this.maxHistory = maxHistory
}
addState(action: string, data: any): void {
this.history.push({
timestamp: Date.now(),
action,
data
})
// Maintain history limit
while (this.history.count() > this.maxHistory) {
this.history.shift()
}
}
undo(): HistoryState | undefined {
return this.history.pop()
}
getHistory(): HistoryState[] {
return this.history.all()
}
}
Document Processing
typescript
interface DocumentSection {
title: string
content: string[]
}
class DocumentProcessor {
private sections: Collection<DocumentSection>
constructor(sections: DocumentSection[]) {
this.sections = collect(sections)
}
processLastSection(): DocumentSection | undefined {
const section = this.sections.pop()
if (section) {
// Process the section
section.content = section.content.map(line => line.trim())
return section
}
return undefined
}
remainingSections(): number {
return this.sections.count()
}
}
Type Safety
typescript
interface TypedItem {
id: number
value: string
}
const items = collect<TypedItem>([
{ id: 1, value: 'first' },
{ id: 2, value: 'second' }
])
// Type-safe pop operation
const item: TypedItem | undefined = items.pop()
if (item) {
console.log(item.id) // TypeScript knows this is safe
console.log(item.value) // TypeScript knows this is safe
}
Return Value
- Returns the last element from the collection and removes it
- Returns
undefined
if the collection is empty - Modifies the original collection by removing the last element
- Maintains type safety with TypeScript