gpt4 book ai didi

javascript - 用另一个对象更新 javascript 对象,但只更新现有的键

转载 作者:行者123 更新时间:2023-12-01 15:55:27 25 4
gpt4 key购买 nike

在 Javascript 或 Lodash 中是否有一个函数,我可以在其中使用来自另一个对象的值“更新”一个对象,但是 不添加新 key ?

var foo = { 'a': 0, 'b': 1 }
var bar = { 'b': 2, 'c': 3 }
像更新(foo,bar),覆盖(“更新”)任何现有键,但不添加不存在的键:
{ 'a': 0, 'b': 2 }
StackOverflow 上几乎肯定有类似的问题,但我一直没能找到。

最佳答案

以下是您可以达到预期结果的一些方法。
下面的代码片段不是修改原始对象,而是使用目标对象的所有键创建一个新对象。
使用空值合并运算符 (??)Nullish coalescing operator当其左侧操作数为 null 时,返回其右侧操作数或 undefined ,否则返回其左侧操作数。有关此运算符的更多详细信息,请参阅 Nullish coalescing operator (??)

var foo = { 'a': 0, 'b': 1 }
var bar = { 'b': 2, 'c': 3 }

function update(target, src) {
const res = {};
Object.keys(target)
.forEach(k => res[k] = (src[k] ?? target[k]));
return res;
}

console.log(update(foo, bar));

使用 hasOwnPropery() 方法 ??对于具有 null 的属性,运算符将失败或 undefined值(value)观。作为替代方案,您可以使用 hasOwnProperty()方法。关于此方法的详细信息,请参阅 Object.prototype.hasOwnProperty()

var foo = { 'a': 0, 'b': 1 }
var bar = { 'b': 2, 'c': 3 }

function update(target, src) {
const res = {};
Object.keys(target)
.forEach(k => res[k] = (src.hasOwnProperty(k) ? src[k] : target[k]));
return res;
}

console.log(update(foo, bar));

使用“in”运算符
您也可以使用 in运算符检查源对象中是否存在属性,但请记住 in如果指定的属性在指定的对象或其原​​型链中,则运算符返回 true。详情请访问 in运算符,见 in operator

var foo = { 'a': 0, 'b': 1 }
var bar = { 'b': 2, 'c': 3 }

function update(target, src) {
const res = {};
Object.keys(target)
.forEach(k => res[k] = (k in src ? src[k] : target[k]));
return res;
}

console.log(update(foo, bar));

关于javascript - 用另一个对象更新 javascript 对象,但只更新现有的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62864338/

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