Created
March 18, 2019 09:20
-
-
Save dimabory/84a7aaa0ad0c7bd28ae37047faaa9f1a to your computer and use it in GitHub Desktop.
7 Tricks: JS objects rest and spread
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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