是否存在将对象的属性子集复制到新对象中的简写方法?

时间:2016-06-20 18:15:55

标签: javascript ecmascript-6 destructuring

考虑以下对象:

const obj = {a: 1, b: 2, c: 3, d: 4, e: 5}

是否有一种简单的语法来创建包含以下内容的新对象:

const obj2 = {a, b, d}

我知道下划线& lodash有.pick(),但我希望有一些我可能不知道的解构技巧。

3 个答案:

答案 0 :(得分:6)

ES2015中的简洁单行是

const obj2 = (({a, b, d}) => ({a, b, d}))(obj);

似乎不可能避免{a, b, d}同义反复,同时保持紧凑。

答案 1 :(得分:4)

您可以分两步完成:

const obj = {a: 1, b: 2, c: 3, d: 4, e: 5};
var {a, b, d} = obj;
const obj2 = {a, b, d};

如果您不想污染范围,

const obj = {a: 1, b: 2, c: 3, d: 4, e: 5};
const obj2 = {};
{
  let {a, b, d} = obj;
  Object.assign(obj2, {a, b, d});
}

答案 2 :(得分:3)

你可以使用Rest parameters并创建像这样的自定义选择功能



const obj = {a: 1, b: 2, c: 3, d: 4, e: 5}

function pick(object, ...p) {
  return p.reduce((o, e) => {return o[e] = object[e], o}, {});
}

console.log(pick(obj, 'a', 'b', 'd'))