167

ES6 で最もコンパクトな方法で少数の属性のみを使用する関数を作成するにはどうすればよいでしょうか?

分解 + 簡略化されたオブジェクト リテラルを使用して解決策を考え出しましたが、フィールドのリストがコード内で繰り返されるのは好きではありません。

さらにスリムなソリューションはありますか?

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

11 に答える 11

8

TC39 のオブジェクト レスト/スプレッド プロパティの提案により、これは非常に滑らかになります。

let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 };
z; // { a: 3, b: 4 }

x(必要のない変数と変数を作成するという欠点がyあります。)

于 2017-05-03T18:29:01.250 に答える
4

オブジェクトの分解を使用して、既存のオブジェクトからプロパティをアンパックし、それらを異なる名前の変数(最初は空の新しいオブジェクトのフィールド) に割り当てることができます。

const person = {
  fname: 'tom',
  lname: 'jerry',
  aage: 100,
}

let newPerson = {};

({fname: newPerson.fname, lname: newPerson.lname} = person);

console.log(newPerson);

于 2019-05-01T04:01:14.280 に答える
0

I required this sollution but I didn't knew if the proposed keys were available. So, I took @torazaburo answer and improved for my use case:

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

// Example:
var person = { name: 'John', age: 29 };
var myObj = pick(person, 'name', 'sex'); // { name: 'John' }
于 2017-09-16T18:29:58.793 に答える
-1

https://stackoverflow.com/users/865693/shesekの reduce アプローチに触発されました:

const pick = (orig, keys) => keys.reduce((acc, key) => ({...acc, [key]: orig[key]}), {})

または、コンマ演算子 ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comma_Operator )を使用してさらに短くします。

const pick = (obj, keys) => keys.reduce((acc, key) => ((acc[key] = obj[key]), acc), {});

利用方法:

pick({ model : 'F40', manufacturer: 'Ferrari', productionYear: 1987 }, 'model', 'productionYear') 結果: {model: "F40", productionYear: 1987}

于 2019-08-15T11:11:09.067 に答える