Skip to content

isNotEmpty Method ​

The isNotEmpty() method checks whether the collection contains any elements. It returns true if the collection has at least one element and false if it's empty.

Basic Syntax ​

typescript
collect(items).isNotEmpty(): boolean

Examples ​

Basic Usage ​

typescript
import { collect } from 'ts-collect'

const nonEmptyArray = collect([1, 2, 3])
console.log(nonEmptyArray.isNotEmpty())  // true

const emptyArray = collect([])
console.log(emptyArray.isNotEmpty())  // false

// After filtering
const availableItems = collect([1, 2, 3])
  .filter(num => num > 2)
if (availableItems.isNotEmpty()) {
  console.log('Items available:', availableItems.all())
}

Working with Objects ​

typescript
interface Product {
  id: number
  name: string
  inStock: boolean
  price: number
}

const products = collect<Product>([
  { id: 1, name: 'Widget', inStock: true, price: 100 },
  { id: 2, name: 'Gadget', inStock: false, price: 200 }
])

// Check available products
const availableProducts = products.where('inStock', true)
if (availableProducts.isNotEmpty()) {
  console.log(`${availableProducts.count()} products available`)
}

// Check sale items
const saleProducts = products.filter(product => product.price < 150)
if (saleProducts.isNotEmpty()) {
  console.log('Sale items found!')
}

Real-world Examples ​

Product Search System ​

typescript
interface SearchResult {
  productId: string
  name: string
  relevance: number
  category: string
  inStock: boolean
}

class ProductSearcher {
  private results: Collection<SearchResult>

  constructor(searchResults: SearchResult[]) {
    this.results = collect(searchResults)
  }

  hasResults(): boolean {
    return this.results.isNotEmpty()
  }

  hasInStockResults(): boolean {
    return this.results
      .where('inStock', true)
      .isNotEmpty()
  }

  hasCategoryResults(category: string): boolean {
    return this.results
      .where('category', category)
      .isNotEmpty()
  }

  hasRelevantResults(minRelevance: number): boolean {
    return this.results
      .filter(result => result.relevance >= minRelevance)
      .isNotEmpty()
  }
}

Order Queue Manager ​

typescript
interface Order {
  id: string
  priority: boolean
  status: 'pending' | 'processing' | 'completed'
  items: number
  value: number
}

class OrderQueueManager {
  constructor(private queue: Collection<Order>) {}

  hasOrdersToProcess(): boolean {
    return this.queue
      .where('status', 'pending')
      .isNotEmpty()
  }

  hasPriorityOrders(): boolean {
    return this.queue
      .where('status', 'pending')
      .where('priority', true)
      .isNotEmpty()
  }

  hasHighValueOrders(threshold: number): boolean {
    return this.queue
      .where('status', 'pending')
      .filter(order => order.value > threshold)
      .isNotEmpty()
  }

  processNextBatch(): void {
    if (this.queue.where('status', 'pending').isNotEmpty()) {
      // Process priority orders first
      if (this.hasPriorityOrders()) {
        this.processPriorityOrders()
      } else {
        this.processRegularOrders()
      }
    }
  }
}

Advanced Usage ​

Inventory Alert System ​

typescript
interface InventoryItem {
  sku: string
  quantity: number
  reorderPoint: number
  lastReorderDate: Date
  supplierLeadTime: number
}

class InventoryAlertSystem {
  constructor(private inventory: Collection<InventoryItem>) {}

  hasLowStockItems(): boolean {
    return this.inventory
      .filter(item => item.quantity <= item.reorderPoint)
      .isNotEmpty()
  }

  hasUrgentReorders(): boolean {
    const today = new Date()
    return this.inventory
      .filter(item => {
        const daysSinceReorder = Math.floor(
          (today.getTime() - new Date(item.lastReorderDate).getTime()) /
          (1000 * 60 * 60 * 24)
        )
        return item.quantity <= item.reorderPoint &&
          daysSinceReorder >= item.supplierLeadTime
      })
      .isNotEmpty()
  }

  checkAndAlert(): void {
    if (this.hasUrgentReorders()) {
      this.sendUrgentAlert()
    } else if (this.hasLowStockItems()) {
      this.sendLowStockAlert()
    }
  }
}

Type Safety ​

typescript
interface TypedProduct {
  id: number
  name: string
  stock: number
}

const products = collect<TypedProduct>([
  { id: 1, name: 'A', stock: 100 }
])

// Type-safe checks
const hasProducts: boolean = products.isNotEmpty()
const hasLowStock = products
  .filter(p => p.stock < 10)
  .isNotEmpty()

Return Value ​

  • Returns true if the collection has at least one element
  • Returns false if the collection is empty
  • Always returns a boolean
  • Can be used in conditional statements
  • Works with any collection type
  • Useful for process control flow

Common Use Cases ​

1. Search Operations ​

  • Verify search results
  • Check filter matches
  • Validate query results
  • Confirm suggestions
  • Check availability

2. Order Processing ​

  • Check pending orders
  • Verify queue status
  • Validate batch size
  • Check high priority
  • Confirm availability

3. Inventory Management ​

  • Check stock levels
  • Verify availability
  • Confirm reorder needs
  • Check locations
  • Validate supplies

4. Product Filtering ​

  • Validate results
  • Check availability
  • Verify categories
  • Confirm matches
  • Check conditions

5. Cart Operations ​

  • Verify contents
  • Check availability
  • Validate items
  • Confirm eligibility
  • Check restrictions

6. User Data ​

  • Check preferences
  • Verify history
  • Validate selections
  • Check permissions
  • Confirm settings

7. Notifications ​

  • Check triggers
  • Verify conditions
  • Validate alerts
  • Confirm events
  • Check thresholds

8. Report Generation ​

  • Verify data
  • Check content
  • Validate sections
  • Confirm metrics
  • Check results

9. Validation Logic ​

  • Check conditions
  • Verify requirements
  • Validate inputs
  • Confirm eligibility
  • Check constraints

10. Process Control ​

  • Check prerequisites
  • Verify conditions
  • Validate state
  • Confirm readiness
  • Check dependencies

Released under the MIT License.