重建部分解构对象es6

时间:2019-01-09 16:55:36

标签: javascript object ecmascript-6

我正在寻找最简明的方法来从解构的对象领域中获取一个新对象。

let obj = {
    a: 1,
    b: 2,
    c: null
}

目前,我有:

let {a, c} = obj;

let data = {a, c}

我希望自己拥有的东西:

let data = {a, c} = obj;
// but data actually becomes {a, b, c}
// and not {a, b} as I wished it to be.

3 个答案:

答案 0 :(得分:3)

尽管您的代码看起来不错,但是如果您的任务包含在樱桃采摘键中,然后将其置于另一个对象中,则解构不是最佳方法:

const object = { a: 5, b: 6, c: 7  };
const picked = (({ a, c }) => ({ a, c }))(object);

答案 1 :(得分:0)

您可以定义一个函数,该函数将提供已分解的对象作为返回值,并将调用分配给data

const obj = {
  a: 1,
  b: 2,
  c: null
}
const partial = ({ a, c }) => ({ a, c })

const data = partial(obj)
console.log(data)

不幸的是,如果没有某些设置,这不可能在一行中完成,但是如果您要在源中的很多地方创建相同的部分对象,则设置是值得的。

答案 2 :(得分:0)

您可以实现一个常见的"pick" function版本,而不是依赖于解构,该版本接受一个对象和一系列从该对象中拉出的键作为输入:

function pick(obj, keys) {
  return keys.reduce((memo, key) => {
    memo[key] = obj[key];
    return memo;
  }, {});
}

const obj = { a: 1, b: 2, c: 3 }
const data = pick(obj, ['a', 'b']); 

console.log(data); // { a: 1, b: 2}

通常,我会认为性能不如可读性重要,这是非常主观的。但是,在这种情况下,尽管pick相对于单衬套的获胜幅度相对较小,但以上pick解决方案和单衬套都比原始两衬套慢了几个数量级: https://jsperf.com/testaagwt14124oih1oij