如何根据javascript中的键合并和替换两个数组中的对象?

2023-12-22

我有两个数组对象(arrayList1,arrayList2)。只是我试图将这两个数组合并为一个数组对象。 我使用的以下术语。

  • 根据键名将两个数组合并为一个数组是type.
  • arrayList2 的值将覆盖 arrayList1。
  • 我得到了预期的输出,但我担心如何以高效和性能的方式进行操作。

有人可以简化我的代码吗..

Note :

  • 如果使用 Array.reduce 函数并且不使用任何插件/库,那就太好了。
  • 我添加了示例输入以供理解。元素顺序将发生变化,两个数组的大小也会发生变化。
const arrayList1 = [
    { type: "A", any: 11, other: "ab", props: "1" },
    { type: "B", any: 22, other: "bc", props: "2" }, // same type
    { type: "C", any: 33, other: "df", props: "3" }
];
 
const arrayList2 = [
    { type: "D", any: 44, other: "aa", props: "11" },
    { type: "B", any: 22, other: "bb", props: "2----2" , x: 10}, // same type
    { type: "E", any: 44, other: "cc", props: "33" }
];

result = arrayList2.reduce(function (arr1, arr2) {
  let isMatchFound = false;
  arr1.forEach(function (list) {
    if (arr2.type == list.type) {
      list = Object.assign(list, arr2);
      isMatchFound = true;
    }
  });
  if (!isMatchFound) {
    arr1.push(arr2);
  }
  return arr1;
}, arrayList1);

console.log('result', JSON.stringify(result));

您还可以使用.reduce() and Object.values()获得所需输出的方法:

const arrayList1 = [
    { type: "A", any: 11, other: "ab", props: "1" },
    { type: "B", any: 22, other: "bc", props: "2" }, // same type
    { type: "C", any: 33, other: "df", props: "3" }
];
 
const arrayList2 = [
    { type: "D", any: 44, other: "aa", props: "11" },
    { type: "B", any: 22, other: "bb", props: "2----2" , x: 10}, // same type
    { type: "E", any: 44, other: "cc", props: "33" }
];

const result = Object.values(
   [].concat(arrayList1, arrayList2)
     .reduce((r, c) => (r[c.type] = Object.assign((r[c.type] || {}), c), r), {})
);
                 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何根据javascript中的键合并和替换两个数组中的对象? 的相关文章

随机推荐

  • Java TreeMap 相当于 C# 吗?

    我咨询过的大多数地方都说使用SortedList 但问题是我正在移植的程序实际上使用了重复的键 按顺序区分 这是TreeMap允许的 但SortedList不允许 有什么建议吗 Does 排序字典 http msdn microsoft c
  • ASIHTTPRequest 的 XML 解析器

    我可以使用什么 XML 解析器库最适合解析 ASIHTTPRequest 响应中的 XML 响应字符串 这也很容易设置并且很容易理解 确实需要立即得到项目结果 Thanks 按照这个 如何在 Objective C 中解析 XML http
  • 如何使用 volley 库 android 执行简单的异步任务

    如您所知 Google 发布了一个新的库 Volley 来管理基于 HTTP 协议的网络请求 但是如果我想使用这个库连接到 mysql db 目前我正在使用异步任务来进行网络调用 如何实现volley库来执行异步任务 任何链接或示例 抱歉英
  • 获取 std::future 的状态

    是否可以检查是否std future完成与否 据我所知 唯一的方法就是打电话wait for持续时间为零并检查状态是否为ready或者没有 但是有更好的方法吗 你是对的 除了打电话wait until对于过去的时间 相当于 没有更好的方法
  • jQuery 将类的一部分与 hasClass 匹配

    我有几个带有 project 0 9 类的 div div class project1 div div class project2 div div class project3 div div class project4 div 我想
  • 为 Eclipse 本身(平台)启用控制台日志记录

    我的 JVM JRE 和 Eclipse 本身有问题 我正在 Windows 8 1 下使用 IBM JVM 运行 Juno 版本 当我尝试从 https P2 URL 访问 安装新软件时 收到以下错误消息 javax net ssl SS
  • Android Q - 未经批准连接wifi

    我正在开发一个自动连接到 Wifi 的应用程序 您会在下面找到我的代码 效果很好 class MainActivity AppCompatActivity override fun onCreate savedInstanceState B
  • 从 ElasticBeanstalk EC2 到 Redis (ElastiCache) 的连接失败

    我们使用 ElasticBeanstalk 来设置一些 Node js 环境 目前 我们使用 Redis 作为会话存储 它设置在 ElastiCache 中 当我 ssh 进入 EC2 实例并 netcat Redis 存储时 我可以确认网
  • C# 泛型接口协方差

    我不确定这里发生了什么 但我使用以下代码收到编译器错误 namespace SO interface IUser
  • 如何检查浏览器是否支持 Polymer?

    我如何检查 JS 或 HTML 代码 当前浏览器是否支持 Polymer 简短回答 快速测试 Firefox 38 0 5 提示 否 而 Chrome 44 0 2403 130 m 提示 是 function supportsPolyme
  • javascript 中的异步和等待[重复]

    这个问题在这里已经有答案了 我是初学者JS并在经历时async and await我遇到了下面的例子 const get async gt const y await hello console log y console log star
  • Visual Studio:防止打开解决方案资源管理器中的文件夹时折叠

    每次我在 Visual Studio 2022 中打开项目时 解决方案资源管理器树中的所有文件夹都会崩溃 这非常烦人并且打断了我的工作流程 我找不到这方面的任何设置 有没有办法阻止这种行为 这似乎也发生在旧版本的 Visual Studio
  • 根据另一个数组的值(未排序,而是分组)将 NumPy 数组拆分为子数组

    假设我有两个 NumPy 数组 x 1 2 8 2 9 1 3 8 9 4 3 5 5 2 3 6 4 7 7 2 3 8 2 2 9 5 3 10 2 3 11 2 4 y 0 0 1 0 1 1 2 2 2 0 0 笔记 值在x没有以任
  • 是否可以让 Node.js 使用 Rhino 作为 Javascript 引擎?

    我在网络应用程序上使用 Node js 完成多项工作 到目前为止一切正常 但 Node js 使用 Google 的 V8 作为默认的 Javascript 引擎 JSE 并且 V8 只能在 x86 和 ARM 指令集架构 ISA 上运行
  • 在标签栏控制器/导航控制器上方添加自定义视图?

    我尝试了以下代码 试图获取显示在选项卡栏控制器上方的自定义视图 该控制器恰好在所有选项卡中都有一个导航控制器 问题是它覆盖在导航栏的顶部 我希望导航栏向下移动 我尝试设置标签栏控制器的框架 但这根本没有移动它 BOOL applicatio
  • NSMutableString appendString 的内存泄漏

    我正在使用 XMLParser 来解析一些 XML 数据 它使用 NSMutableString resultString 来存储标签字符 在每个 parser didStarElement 方法中 我分配并初始化 resultString
  • 任何域对象都应该不可序列化吗?

    有没有办法告诉编译器 我希望我的对象默认可序列化 几乎每个序列化引擎都想知道您的对象是否合适 这可以采取以下形式 Serializable ISerializable BinaryFormatter SoapFormatter Serial
  • 在 TWinControl 类上添加属性

    我想将已发布的属性添加到 TWinControl 中 有没有办法在不需要重新编译基本源代码的情况下做到这一点 如果没有 有什么方法可以重新编译基本源代码而不需要太多麻烦 谢谢建议 编辑因为新想法 好吧 我想做的就是尝试覆盖 System p
  • 如何防止 Python print 添加换行符或空格? [复制]

    这个问题在这里已经有答案了 在Python中 如果我说 print h 我收到字母 h 和换行符 如果我说 print h 我收到字母 h 并且没有换行符 如果我说 print h print m 我得到字母 h 一个空格和字母 m 如何防
  • 如何根据javascript中的键合并和替换两个数组中的对象?

    我有两个数组对象 arrayList1 arrayList2 只是我试图将这两个数组合并为一个数组对象 我使用的以下术语 根据键名将两个数组合并为一个数组是type arrayList2 的值将覆盖 arrayList1 我得到了预期的输出