我正在寻找最简明的方法来从解构的对象领域中获取一个新对象。
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.
答案 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