Вот что-то более тонкое, хотя оно не позволяет повторять список полей. Он использует «деструктурирование параметров», чтобы избежать необходимости в параметре v
.
({id, title}) => ({id, title})
@ Решение EthanBrown является более общим. Вот более идиоматическая версия его, которая использует Object.assign
и вычисляемые свойства ([p]
части):
function pick(o, ...props) {
return Object.assign({}, ...props.map(prop => ({[prop]: o[prop]})));
}
Если мы хотим сохранить атрибуты от свойств, таких как configurable
и добытчики и сеттера, а также пропуска не -enumerable свойства, затем:
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)})))
);
}
Я обнаружил, что хочу сделать именно это. –