Resting và Spreading JavaScript Objects
Note: This post is over 6 years old. The information may be outdated.
1. Thêm thuộc tính vào Objects.
Bạn có thể vừa clone và thêm thuộc tính cho objects. Ví dụ sau clone user object và thêm vào thuộc tính password
const user = { id: 100, name: 'Howard Moon' }
const userWithPass = { ...user, password: 'Password!' }
user //=> { id: 100, name: 'Howard Moon' }
userWithPass //=> { id: 100, name: 'Howard Moon', password: 'Password!' }
2. Merge Objects
Merge 2 objects vào 1 objects
const part1 = { id: 100, name: 'Howard Moon' }
const part2 = { id: 100, password: 'Password!' }
const user1 = { ...part1, ...part2 }
//=> { id: 100, name: 'Howard Moon', password: 'Password!' }
Hoặc có thể merge với cú pháp sau:
const partial = { id: 100, name: 'Howard Moon' }
const user = { ...partial, ...{ id: 100, password: 'Password!' } }
user //=> { id: 100, name: 'Howard Moon', password: 'Password!' }
3. Loại bỏ (xóa) một thuộc tính (Exclude Properties)
Có thể loại bỏ thuộc tính bằng cách destructuring kết hợp với rest operator. Ví dụ sau loại bỏ thuộc tính password
const noPassword = ({ password, ...rest }) => rest
const user = {
id: 100,
name: 'Howard Moon',
password: 'Password!',
}
noPassword(user) //=> { id: 100, name: 'Howard moon' }
4. Loại bỏ thuộc tính linh động (Dynamically Exclude Properties)
Thủ thuật sau sử dụng computed object property names để xóa thuộc tính một cách linh động:
const user1 = {
id: 100,
name: 'Howard Moon',
password: 'Password!',
}
const removeProperty =
(prop) =>
({ [prop]: _, ...rest }) =>
rest
// ---- ------
// \ /
// dynamic destructuring
const removePassword = removeProperty('password')
const removeId = removeProperty('id')
removePassword(user1) //=> { id: 100, name: 'Howard Moon' }
removeId(user1) //=> { name: 'Howard Moon', password: 'Password!' }
5. Sắp xếp loại thứ tự các thuộc tính (Organize Properties)
Đưa id lên vị trí đầu tiền
const user3 = {
password: 'Password!',
name: 'Naboo',
id: 300,
}
const organize = (object) => ({ id: undefined, ...object })
// -------------
// /
// move id to the first property
organize(user3)
//=> { id: 300, password: 'Password!', name: 'Naboo' }
6. Thuộc tính mặc định (Default Properties)
setDefaults
function sau sẽ tự động thêm thuộc tính quotes: []
nếu object đó không có thuộc tính quotes.
const user2 = {
id: 200,
name: 'Vince Noir',
}
const user4 = {
id: 400,
name: 'Bollo',
quotes: ["I've got a bad feeling about this..."],
}
const setDefaults = ({ quotes = [], ...object }) => ({ ...object, quotes })
setDefaults(user2)
//=> { id: 200, name: 'Vince Noir', quotes: [] }
setDefaults(user4)
//=> {
//=> id: 400,
//=> name: 'Bollo',
//=> quotes: ["I've got a bad feeling about this..."]
//=> }
7. Đổi tên thuộc tính (Renaming Properties)
Kết hợp các kỹ thuật ở trên, ta viết function rename để đổi tên 1 thuộc tính như sau:
const renamed = ({ ID, ...object }) => ({ id: ID, ...object })
const user = {
ID: 500,
name: 'Bob Fossil',
}
renamed(user) //=> { id: 5000, name: 'Bob Fossil' }