使用es6从两个对象中获取差异对象

2023-12-05

我试图找出使用 es6 获取两个对象之间的交集对象的最佳方法是什么。 我的意思是:

a = {a:'a',b:'b',c:'c', d:'d'};
b = {a:'a',b: '1', c:'c', d:'2', f'!!!'}
// result I want:
c = getDifference(a,b)
//c is now: {b:'1', d:'2'}

有没有一种简单的方法可以使用 es6 来做到这一点,或者我是否需要使用 for(in) 和 Object.keys() 迭代 a 对象并进行比较,将交集分配给 c?

(a,b) => {
    const c = {};
    for(const _key in Object.keys(a)){
       if(b[_key] && b[_key] !== a[_key]){
           c[_key] = b[_key];
       }
    }
    return c;
}

我知道 lodash/underscore 有这些类型的辅助函数...但是尝试看看 es6 是否有任何新的短语法,如果没有,使用 vanilla js 执行此操作的最短方法是什么。


您可以获取对象的条目b using Object.entries()然后过滤掉与中相同的键值对a using .filter(),然后,您可以使用重建您的对象Object.fromEntries()像这样:

const a = {a:'a',b:'b',c:'c', d:'d'};
const b = {a:'a',b: '1', c:'c', d:'2', f:'!!!'}

const getDifference = (a, b) => 
  Object.fromEntries(Object.entries(b).filter(([key, val]) => key in a && a[key] !== val));


// result I want:
const c = getDifference(a,b); // peforms b-a
console.log(c); // {b:'1', d:'2'}

如果你不能支持Object.fromEntries(),那么你可以使用.reduce()相反,为您构建对象:

const a = {a:'a',b:'b',c:'c', d:'d'};
const b = {a:'a',b: '1', c:'c', d:'2', f:'!!!'}

const getDifference = (a, b) => 
  Object.entries(b).filter(([key, val]) => a[key] !== val && key in a).reduce((a, [key, v]) => ({...a, [key]: v}), {});


// result I want:
const c = getDifference(a,b); // peforms b-a
console.log(c); // {b:'1', d:'2'}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用es6从两个对象中获取差异对象 的相关文章

随机推荐

  • SceneKit – 加载 HDR 或 EXR 光照环境没有效果

    我尝试加载 hdr文件以将其用作天空盒并使用其照明信息 这是我使用的代码 backgroundColor UIColor gray check if a default skybox is added let environment UII
  • 以编程方式删除 Lotus Notes 设计元素继承

    作为创建基本修订控制系统的一部分 我想以编程方式禁用 Lotus Notes 模板上的设计元素级别继承 到目前为止我已经尝试过以下方法 DXL 导出 ForceNoteFormat true XSLT 由于导入器中字段 上的验证问题而失败
  • 通过chrome扩展获取下载文件的绝对路径

    我正在开发一个 chrome 扩展 它可以从网页下载特定文件 我有一个 popup html 通过它我可以输入要下载的文件的名称 还有一个链接 历史记录 单击该链接我想打开一个新页面 其中包含指向以前下载的文件的链接 下载历史记录 我可以下
  • PHP 致命错误:在非对象上调用成员函数 Execute() [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 当我执行此代码时 出现错误 PHP 致命错误 在非对象
  • 如何在 Scene Kit 中对同一场景使用多个摄像机

    我有 2 个彼此相邻的 SCNView 两者都应该显示相同的场景 但通过不同的摄像机 在我看来 场景套件使用该节点和节点层次结构中最高的相机 所以我尝试了类似的方法 leftSceneView scene rootNode addChild
  • 哪里可以下载 MotoDev Studio? [关闭]

    Closed 这个问题是无关 目前不接受答案 在新的摩托罗拉网站中 我找不到任何 MotoDev Studio 的链接 我去年用过 现在好像消失了 你知道我在哪里可以找到最后的版本吗 他们不再支持 MotoDev 工作室 这与收购Googl
  • Swift:如何使用 PREPROCESSOR Flags(如 `#if DEBUG`)来实现 API 密钥?

    In Objective C有时使用静态字符串常量定义备用 API 键很有用 例如 区分分析包的 RELEASE 和 DEBUG 键 如 MixPanel Flurry 或 Crashlytics if DEBUG static NSStr
  • laravel 在本地计算机上返回 json 字符串,但在 elastic beanstalk 实例上返回整数

    我在使用 aws mysql laravel 和 Angular 时遇到一个奇怪的问题 我有一个本地运行的 vagrant 实例 上面运行着我的应用程序和数据库 我在前端使用 Angular 因此当加载视图时 Angular 会请求接收用户
  • 您能解释一下这个嵌入式 MATLAB 函数错误吗?

    我在将值从 GUI 发送到 Simulink 模型中的嵌入式 MATLAB 函数 EMF 时遇到问题 我从 GUI 中的滑块获取该值 并将其发送到模型中的 EMF 块 我可以确认该值已从 GUI 正确传输到 Simulink 模块 因为我可
  • 在 Access 中为最终用户创建动态“复选框”查询

    用例场景 我有一个低收入居民的客户 这些居民可以填写带有一堆复选框的纸质表格 它有一个 教育 部分 GED 文凭 助理等 另一部分为 技能 暖通空调 管道等 雇主联系我的客户 例如要求他们所有接受过 HVAC 培训的居民都拥有 GED 现在
  • Varnish + nginx + ELB 499 响应

    我有 varnish 4 服务器使用 nginx 作为连接到 ELB 的反向代理 每隔 2 天左右 我的服务器就会停止响应 我会在 nginx access log 中看到 499 个响应 重启nginx即可解决问题 为什么我开始收到这些
  • 如何创建不可复制对象的元组

    我正在尝试创建一个不可复制对象的元组 当我有了复制构造函数时 我就可以构造元组 当它们被删除时 编译将失败 include
  • 如何在 Git 中提交并推送选定的文件(但不是全部)

    我有一个有两个分支的 git 存储库 develop and master 我主要工作于develop当文件准备好时 有时不太坚持这个确认 我将它们合并到master分支将它们投入生产 看看这张照片 所有这些文件都来自develop分支并被
  • 通过 LaTeX 使用 pandoc 转换为 PDF 时出现表格间距问题

    我面临着 R 中的问题texreg 似乎没有打破表格下方注释中的线条 此外 模型之间的边距也没有像发生的那样平等地扩展htmlreg 这给出了一个干净的结果 手动中断如 n或 HTML 标签不适用于 texreg 有一个部分MichaelC
  • 如何使用 JavaScript 在 div 中加载 HTML 页面?

    我想要加载 home html div div a href HOME a div div div 当我使用 Firefox 时 这个效果很好 当我使用 Google Chrome 时 它 要求安装插件 如何让它 div
  • 统计 Instagram 上的关注者数量?有永久解决方案吗?

    我正在尝试从 Instagram 帐户列表中获取关注者数量 我想集成 Instagram API 或任何黑客解决方案 以消除 Instagram 帐户上的关注者 我针对上述问题找到了很多解决方案 但没有一个能正常工作 我关注的链接 获取 I
  • 排除特定子文件夹

    我有一个包 它通过一个文件夹及其子文件夹运行来获取客户端数据 协议已更改 现在客户每次都会将其数据发布到不同的文件夹名称中 我想知道是否可以在主文件夹上执行 foreach 循环并排除特定文件夹 例如archive 我没有编写脚本的知识 所
  • 为什么要初始化extra的key呢?

    当我们想要一个意图将一些数据传送到另一个应用程序组件时 我们会使用该意图的额外部分 意图只是一个键值对 我们首先将密钥定义为公共常量 并赋予它一个值 例如 public static final String extra key com e
  • 如何检测程序何时空闲?

    例如 程序如何检测用户已经有 5 分钟没有使用它了 在 WinForms 中有一个 Application Idle 事件 http msdn microsoft com en us library system windows forms
  • 使用es6从两个对象中获取差异对象

    我试图找出使用 es6 获取两个对象之间的交集对象的最佳方法是什么 我的意思是 a a a b b c c d d b a a b 1 c c d 2 f result I want c getDifference a b c is now