Ini adalah sesuatu yang lebih ramping, meskipun itu tidak menghindari mengulangi daftar bidang. Ia menggunakan "perusakan parameter" untuk menghindari kebutuhan akan v
parameter.
({id, title}) => ({id, title})
(Lihat contoh runnable dalam jawaban lain ini ).
Solusi @ EthanBrown lebih umum. Berikut ini adalah versi yang lebih idiomatis yang menggunakan Object.assign
, dan menghitung properti ( [p]
bagian):
function pick(o, ...props) {
return Object.assign({}, ...props.map(prop => ({[prop]: o[prop]})));
}
Jika kita ingin melestarikan atribut properti, seperti configurable
dan getter dan setter, sementara juga menghilangkan properti yang tidak dapat dihitung, maka:
function pick(o, ...props) {
var has = p => o.propertyIsEnumerable(p),
get = p => Object.getOwnPropertyDescriptor(o, p);
return Object.defineProperties({},
Object.assign({}, ...props
.filter(prop => has(prop))
.map(prop => ({prop: get(props)})))
);
}
Object.assign
; es6 seperti pohon Natal dengan begitu banyak hadiah di bawahnya aku masih menemukan hadiah berbulan-bulan setelah liburan