gpt4 book ai didi

javascript - 在 Javascript 中设置对象属性(如果为真)

转载 作者:行者123 更新时间:2023-12-03 03:01:53 26 4
gpt4 key购买 nike

我想将属性从 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}

是否有更简单的方法来做到这一点?

最佳答案

两种解决方案都使用 Map重命名数组键,和 Object#assign合并对象(片段不支持对象休息/传播)。

ES2017

使用Object#entries (ES2017) 获取 objA 的键和值,仅当值不为假时重命名并添加它们。

const a2x = new Map([['a', 'x'], ['b', 'y'], ['c', 'z']]);

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

const result = Object.assign({}, objB,
Object.entries(objA).reduce((r, [k, v]) => v ?
Object.assign(r, { [a2x.get(k)]: v }) : r, {}));

console.log(result);

洛达什:

使用_.mapKeys()要更改键的名称,然后 _.pickBy()_.identity()删除虚假值。

const a2x = new Map([['a', 'x'], ['b', 'y'], ['c', 'z']]);

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

const result = Object.assign({}, objB,
_.pickBy(_.mapKeys(objA, (v, k) => a2x.get(k)), _.identity));

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

关于javascript - 在 Javascript 中设置对象属性(如果为真),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47344305/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com