使用另一个对象(仅现有键)更新javascript对象

精液:

是否存在Javascript或Lodash中的函数,可以用另一个对象中的值“更新”一个对象,而无需添加新键

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

诸如update(foo,bar),覆盖(“更新”)任何现有键之类的东西,但不添加不存在的键:

{ 'a': 0, 'b': 2 }

在StackOverflow上几乎肯定有类似的问题,但我一直找不到。

优素福:

以下是一些可以达到预期效果的方法。

以下代码段未修改原始对象,而是使用目标对象的所有键创建了一个新对象。

使用空值合并运算符(??)

Nullish coalescing operator当其左侧操作数为null或时undefined,返回其右侧操作数,否则返回其左侧操作数。有关此运算符的更多详细信息,请参见Nullish合并运算符(??)。

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()方法

??运算符将失败带有nullundefined值的属性或者,您可以使用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

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));

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

创建一个新的javascript对象,该对象仅具有从另一个现有对象中选择的属性

Javascript - 基于另一个对象的值映射更新对象键

javascript通过映射更新基于另一个对象的对象键/值

如何使用Typescript中另一个对象的键更新对象?

从另一个对象更新JavaScript对象属性

Javascript将对象值插入另一个具有相同键的对象

更新在另一个对象内使用的对象

使用现有键的另一个数组更新多维数组

Javascript - 使用变量更新另一个对象中的深层对象

如何使用最新的 Javascript 合并两个对象,使一个对象的键映射到另一个对象的值,而第二个对象没有额外的键?

检查JavaScript对象的最佳方法是拥有另一个JavaScript对象的所有键

删除对象的键也会删除另一个对象中的键-Javascript

JPA ManyToMany:将现有对象添加到另一个对象

从现有的 js 对象创建另一个不同格式的 js 对象

无法将对象添加为另一个现有 JSON 对象的子字段

使用javascript删除与对象的另一个键和值对对应的对象数组中的重复项

基于另一个对象键的Javascript对象排序

与打字稿中另一个对象具有相同键的对象?

更新python字典(向现有键添加另一个值)

使用另一个对象中的键在新对象中使用

打字稿仅允许来自另一个对象的键

仅更新另一个对象中的一个对象,其余参数保持不变

在JavaScript中从一个对象到另一个对象搜索键/值对

从另一个具有相同键的对象数组创建一个对象数组

在TypeScript中将数组项推入另一个数组的现有对象中

Laravel将另一个关系附加到现有的Model对象

从另一个JVM加载JVM中的现有类对象

从另一个数组向现有对象数组添加新属性

将另一个对象添加到现有的JSON中