1. ホーム
  2. javascript

[解決済み] ES 6でオブジェクトからプロパティを取得するためのワンライナー

2022-04-24 12:24:50

質問

ES6で、いくつかの属性だけを受け取る関数を最もコンパクトに書くにはどうしたらよいでしょうか?

しかし、フィールドのリストがコード内で繰り返されるのは好きではありません。

もっとスリムな解決策はないのでしょうか?

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

解決方法は?

フィールドのリストの繰り返しを避けることはできませんが、よりスリムなものを紹介します。これは、"パラメータ再構築"を使用して、フィールドのリストの繰り返しを避けることはできませんが、よりスリムなものです。 v パラメータを使用します。

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

(実行可能な例として、この 他の回答 ).

EthanBrownの解答はより一般的なものです。以下は、より慣用的なバージョンです。 Object.assign と、計算されたプロパティ( [p] の部分)。

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

プロパティの属性を保持したい場合、例えば configurable とゲッターとセッターを使用し、かつ、列挙不可能なプロパティを省略することができます。

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)})))
    );
}