Skip to content

Flip Method ​

The flip() method swaps the collection's keys with their corresponding values. For arrays, this means the values become the keys and the array indices become the values.

Basic Syntax ​

typescript
collect(items).flip()

Examples ​

Basic Usage ​

typescript
import { collect } from 'ts-collect'

// Simple key-value pairs
const data = collect({
  name: 'John',
  age: '30',
  city: 'New York'
})

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

Working with Arrays ​

typescript
const array = collect(['a', 'b', 'c'])
console.log(array.flip().all())
// {
//   'a': 0,
//   'b': 1,
//   'c': 2
// }

Real-world Examples ​

Language Translations ​

typescript
interface Translations {
  [key: string]: string
}

const englishToSpanish = collect<Translations>({
  'hello': 'hola',
  'goodbye': 'adios',
  'thank you': 'gracias'
})

// Create Spanish to English translations
const spanishToEnglish = englishToSpanish.flip()
console.log(spanishToEnglish.all())
// {
//   'hola': 'hello',
//   'adios': 'goodbye',
//   'gracias': 'thank you'
// }

Status Code Mapping ​

typescript
interface StatusCodes {
  [key: string]: number
}

const httpStatusCodes = collect<StatusCodes>({
  'OK': 200,
  'Created': 201,
  'Not Found': 404,
  'Server Error': 500
})

// Create reverse lookup
const statusCodeMessages = httpStatusCodes.flip()
console.log(statusCodeMessages.all())
// {
//   '200': 'OK',
//   '201': 'Created',
//   '404': 'Not Found',
//   '500': 'Server Error'
// }

Advanced Usage ​

Configuration Mapping ​

typescript
interface ConfigMap {
  [key: string]: string
}

const environmentVariables = collect<ConfigMap>({
  DB_HOST: 'database.host',
  DB_PORT: 'database.port',
  DB_USER: 'database.username',
  DB_PASS: 'database.password'
})

// Create reverse mapping for configuration lookup
const configToEnvMap = environmentVariables.flip()
console.log(configToEnvMap.all())
// {
//   'database.host': 'DB_HOST',
//   'database.port': 'DB_PORT',
//   'database.username': 'DB_USER',
//   'database.password': 'DB_PASS'
// }

Role Permission Mapping ​

typescript
interface PermissionMap {
  [key: string]: string
}

const rolePermissions = collect<PermissionMap>({
  admin: 'all',
  editor: 'write',
  viewer: 'read'
})

// Create permission to role mapping
const permissionRoles = rolePermissions.flip()
console.log(permissionRoles.all())
// {
//   'all': 'admin',
//   'write': 'editor',
//   'read': 'viewer'
// }

Working with Duplicate Values ​

typescript
const dataWithDuplicates = collect({
  key1: 'value',
  key2: 'value',
  key3: 'unique'
})

// Note: When flipping, duplicate values will overwrite each other
console.log(dataWithDuplicates.flip().all())
// {
//   'value': 'key2',  // Only keeps the last occurrence
//   'unique': 'key3'
// }

Practical Applications ​

File Extension Mapping ​

typescript
interface MimeTypes {
  [key: string]: string
}

const mimeTypes = collect<MimeTypes>({
  html: 'text/html',
  css: 'text/css',
  js: 'application/javascript',
  json: 'application/json'
})

// Create reverse lookup for file type detection
const extensionLookup = mimeTypes.flip()
console.log(extensionLookup.all())
// {
//   'text/html': 'html',
//   'text/css': 'css',
//   'application/javascript': 'js',
//   'application/json': 'json'
// }

Type Safety ​

typescript
interface TypedMap {
  [key: string]: string | number
}

const typedData = collect<TypedMap>({
  id: 1,
  name: 'John',
  age: '30'
})

// TypeScript ensures type safety
const flipped = typedData.flip()
// The resulting types are automatically inferred

Return Value ​

Returns a new Collection instance with the keys and values flipped. Note that:

  • For objects, the values become the new keys and the keys become the new values
  • For arrays, the values become the keys and the indices become the values
  • If there are duplicate values in the original collection, only the last occurrence will be preserved in the flipped result
  • All values must be either strings or numbers to be valid as object keys

Released under the MIT License.