在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。对象传播是一个建议。如果你愿意接受使用实验功能的答案,你应该在你的问题上加上标签。hasobjB
始终是键{x,y,z}
?