Skip to content

Instantly share code, notes, and snippets.

@dimabory
Created March 18, 2019 09:20
Show Gist options
  • Save dimabory/84a7aaa0ad0c7bd28ae37047faaa9f1a to your computer and use it in GitHub Desktop.
Save dimabory/84a7aaa0ad0c7bd28ae37047faaa9f1a to your computer and use it in GitHub Desktop.
7 Tricks: JS objects rest and spread
// 1. add props
const user = { id: 100, name: 'Howard Moon'} // { id: 100, name: 'Howard Moon' }
const userWithPass = { ...user, password: 'Password!' } // { id: 100, name: 'Howard Moon', password: 'Password!'
// 2. merge obj
const part1 = { id: 100, name: 'Howard Moon' }
const part2 = { id: 100, password: 'Password!' }
const user = { ...part1, ...part2 } // { id: 100, name: 'Howard Moon', password: 'Password!' }
// 3. exclude props
const noPassword = ({ password, ...rest }) => rest
const user = { id: 100, name: 'Howard Moon', password: 'Password!' }
noPassword(user) // { id: 100, name: 'Howard moon' }
// 4. dynamically exclude props
const user = { id: 100, name: 'Howard Moon', password: 'Password!' }
const removeProperty = prop => ({ [prop]: _, ...rest }) => rest
const removePassword = removeProperty('password')
const removeId = removeProperty('id')
removePassword(user) // { id: 100, name: 'Howard Moon' }
removeId(user) // { name: 'Howard Moon', password: 'Password!' }
// 5. organize props
const user = { name: 'Howard Moon', password: 'Password!', id: 100 }
const organize = object => ({ id: undefined, ...object }) // move id to the first property
organize(user) // { id: 300, password: 'Password!', name: 'Howard Moon' }
const organize = ({ password, ...object }) => ({ ...object, password }) // move password to last property
organize(user) // { name: 'Howard Moon', id: 100, password: 'Password!' }
// 6. default props
const user = { id: 200, name: 'Vince Noir' }
const user2 = { id: 400, name: 'Bollo', quotes: ["I've got a bad feeling about this..."] }
const setDefaults = ({ quotes = [], ...object}) => ({ ...object, quotes })
setDefaults(user) // { id: 200, name: 'Vince Noir', quotes: [] }
setDefaults(user2) // { id: 400, name: 'Bollo', quotes: ["I've got a bad feeling about this..."] }
// 7. rename props
const renamed = ({ ID, ...object }) => ({ id: ID, ...object })
const user = { ID: 500, name: 'Vince Noir' }
renamed(user) //=> { id: 500, name: 'Vince Noir' }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment