一尘不染

单行从 ES 6 中的对象获取一些属性

all

如何编写一个函数,在 ES6 中以最紧凑的方式只需要很少的属性?

我想出了使用解构+简化对象文字的解决方案,但我不喜欢在代码中重复该字段列表。

有没有更苗条的解决方案?

(v) => {
    let { id, title } = v;
    return { id, title };
}

阅读 52

收藏
2022-09-03

共1个答案

一尘不染

这里有一些更苗条的东西,尽管它不会避免重复字段列表。它使用“参数解构”来避免对v参数的需要。

({id, title}) => ({id, title})

@EthanBrown 的解决方案更通用。这是它的一个更惯用的版本,它使用Object.assign, 和计算属性([p]部分):

function pick(o, ...props) {
    return Object.assign({}, ...props.map(prop => ({[prop]: o[prop]})));
}

如果我们想保留属性的属性,例如configurablegetter 和 setter,同时也省略不可枚举的属性,那么:

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)})))
    );
}
2022-09-03