首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用匹配的属性更新对象,忽略新属性

使用匹配的属性更新对象,忽略新属性
EN

Stack Overflow用户
提问于 2018-07-06 09:09:33
回答 3查看 3.2K关注 0票数 9

我使用类型记录,我想用另一个更新对象,只在匹配的键上更新。

代码语言:javascript
复制
// Destination
objectOne = {
  a: 0,
  b: 0,
};

// Source
objectTwo = {
  a: 1,
  b: 1,
  c: 1,
};

// Expected
result = {
  a: 1,
  b: 1,
};

// Current solution
const current = {};
Object.keys(objectTwo).forEach(key => key in objectOne ? current[key] = objectTwo[key] : null);

console.log(current);

是否有一个一行(即不是迭代键的自定义函数)会忽略源中的属性c?我还想避免使用库,如lodash或JQuery。

复制编辑我的问题不是合并两个对象,我的问题是忽略第二个对象中的字段,而不是第一个对象中的字段。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-07-30 10:32:32

经过一段时间没有答案,似乎最短的解决方案是我自己提供的:

代码语言:javascript
复制
Object.keys(newObj).forEach(key => key in oldObj? result[key] = newObj[key] : null)
票数 5
EN

Stack Overflow用户

发布于 2018-07-06 09:28:05

代码语言:javascript
复制
const result = Object.keys(objectOne)
    .reduce((init, key) => Object.assign(init, {[key]: objectTwo[key]}) , {});
票数 0
EN

Stack Overflow用户

发布于 2018-07-06 09:39:43

我认为没有内置函数来完成所需的任务,而不是使用迭代第一个对象的键和第二个对象的值的自定义函数:

代码语言:javascript
复制
const objectOne = {
  a: 0,
  b: 0
};

const objectTwo = {
  a: 1,
  b: 1,
  c: 1,
};

const result = Object.keys(objectOne).reduce((all, key) => {

    all[key] = objectTwo[key] || objectOne[key];

    return all;

},{});

console.log(result);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51206836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档