javascript - 从 ES 6 中的对象获取一些属性的单行代码

标签 javascript ecmascript-6 ecmascript-harmony destructuring ecmascript-next

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

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

有没有更精简的解决方案?

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

最佳答案

这里有一些更精简的内容,尽管它并不能避免重复字段列表。它使用“参数解构”来避免使用 v 参数。

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

(请参阅此 other answer 中的可运行示例)。

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

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

如果我们想保留属性的属性,例如可配置以及getter和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)})))
    );
}

关于javascript - 从 ES 6 中的对象获取一些属性的单行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59359942/

相关文章:

没有回调的 JavaScript 原生 Promise()

javascript - 当用户切换到一个完全不同的窗口时,有什么方法可以避免 focusout 事件吗?

javascript - React Native中的条件渲染错误

node.js - 找不到模块express Babel-node

javascript - 有人可以将此箭头函数转换为普通函数吗?

javascript - 如何在 ES.Next 中编写库

javascript - 如何在 coffeescript 中启用和声语法支持?

Javascript 函数无法获取高度 css 属性

javascript - 使用 OData 过滤器生成 Breeze.js 查询(多个谓词)

javascript - 使用谷歌地图 setIcon 时如何更改标记大小