在Javascript中设置truthy的对象属性

在Javascript中设置truthy的对象属性,javascript,object,ecmascript-6,lodash,Javascript,Object,Ecmascript 6,Lodash,我想将属性从objA传输到objB,同时更改它们的名称并仅在它们真实时重写。使用lodash,但使用ES6解决方案会更好 这就是我到目前为止所做的: // My initial objects const objA = {a: 1, b: '', c: null}; const objB = {x: 7, y: 8, z: 9}; // Extracting and renaming let {x: a, y: b, z: c} = obj1; // Sanitizing const tem

我想将属性从
objA
传输到
objB
,同时更改它们的名称并仅在它们真实时重写。使用lodash,但使用ES6解决方案会更好

这就是我到目前为止所做的:

// My initial objects
const objA = {a: 1, b: '', c: null};
const objB = {x: 7, y: 8, z: 9};

// Extracting and renaming
let {x: a, y: b, z: c} = obj1;

// Sanitizing
const temp = _.pickBy({x, y, z}, _.identity);

// Merging A and B
return {...objB, ...objA}; // {x: 1, y: 8, z: 9}
有没有一种不那么做作的方法呢?

这两种解决方案都使用a来重命名数组键和合并对象(代码段不支持对象静止/展开)

ES2017

使用(ES2017)获取
objA
的键和值,仅当值不为falsy时才重命名并添加它们

consta2x=新映射(['a','x'],['b','y'],['c','z']);
常量objA={a:1,b:'',c:null};
常量objB={x:7,y:8,z:9};
const result=Object.assign({},objB,
Object.entries(objA).reduce((r[k,v])=>v?
赋值(r,{[a2x.get(k)]:v}):r,{});

控制台日志(结果)
似乎使用地图会更明智。FWIW,
{…objB,…objA}
是无效的ES6。对象传播是一个建议。如果你愿意接受使用实验功能的答案,你应该在你的问题上加上标签。has
objB
始终是键
{x,y,z}