นี่คือบางสิ่งที่บางกว่าแม้ว่าจะไม่หลีกเลี่ยงการทำซ้ำรายการของฟิลด์ มันใช้ "การทำลายโครงสร้างพารามิเตอร์" เพื่อหลีกเลี่ยงความต้องการสำหรับv
พารามิเตอร์
({id, title}) => ({id, title})
(ดูตัวอย่างที่รันได้ในคำตอบอื่น ๆนี้)
@ โซลูชันของ EthanBrown เป็นเรื่องทั่วไปมากขึ้น นี่คือเวอร์ชันที่ใช้สำนวนObject.assign
และคุณสมบัติที่คำนวณได้มากกว่า ( [p]
ส่วน):
function pick(o, ...props) {
return Object.assign({}, ...props.map(prop => ({[prop]: o[prop]})));
}
ถ้าเราต้องการที่จะรักษาคุณสมบัติของคุณสมบัติเช่นconfigurable
และ getters และ setters ในขณะที่ยังละเว้นคุณสมบัติที่ไม่นับได้แล้ว:
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 เหมือนต้นคริสต์มาสที่มีของขวัญมากมายอยู่ข้างใต้ฉันยังคงหาของขวัญได้หลายเดือนหลังจากวันหยุด