Aquí hay algo más delgado, aunque no evita repetir la lista de campos. Utiliza la "desestructuración de parámetros" para evitar la necesidad del v
parámetro.
({id, title}) => ({id, title})
(Vea un ejemplo ejecutable en esta otra respuesta ).
La solución de @ EthanBrown es más general. Aquí hay una versión más idiomática de la misma que usa Object.assign
propiedades calculadas (la [p]
parte):
function pick(o, ...props) {
return Object.assign({}, ...props.map(prop => ({[prop]: o[prop]})));
}
Si queremos preservar los atributos de las propiedades, como configurable
y getters y setters, al tiempo que omitimos propiedades no enumerables, entonces:
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 es como un árbol de Navidad con tantos regalos debajo que todavía encuentro regalos meses después de las vacaciones