2722. 根据 ID 合并两个数组

现给定两个数组 arr1arr2 ,返回一个新的数组 joinedArray 。两个输入数组中的每个对象都包含一个 id 字段。joinedArray 是一个通过 idarr1arr2 连接而成的数组。joinedArray 的长度应为唯一值 id 的长度。返回的数组应按 id 升序 排序。

如果一个 id 存在于一个数组中但不存在于另一个数组中,则该对象应包含在结果数组中且不进行修改。

如果两个对象共享一个 id ,则它们的属性应进行合并:

  • 如果一个键只存在于一个对象中,则该键值对应该包含在对象中。
  • 如果一个键在两个对象中都包含,则 arr2 中的值应覆盖 arr1 中的值。

示例 1:

复制代码
输入:
arr1 = [
    {"id": 1, "x": 1},
    {"id": 2, "x": 9}
], 
arr2 = [
    {"id": 3, "x": 5}
]
输出:
[
    {"id": 1, "x": 1},
    {"id": 2, "x": 9},
    {"id": 3, "x": 5}
]
解释:没有共同的 id,因此将 arr1 与 arr2 简单地连接起来。

示例 2:

复制代码
输入:
arr1 = [
    {"id": 1, "x": 2, "y": 3},
    {"id": 2, "x": 3, "y": 6}
], 
arr2 = [
    {"id": 2, "x": 10, "y": 20},
    {"id": 3, "x": 0, "y": 0}
]
输出:
[
    {"id": 1, "x": 2, "y": 3},
    {"id": 2, "x": 10, "y": 20},
    {"id": 3, "x": 0, "y": 0}
]
解释:id 为 1 和 id 为 3 的对象在结果数组中保持不变。id 为 2 的两个对象合并在一起。arr2 中的键覆盖 arr1 中的值。

示例 3:

复制代码
输入:
arr1 = [
    {"id": 1, "b": {"b": 94},"v": [4, 3], "y": 48}
]
arr2 = [
    {"id": 1, "b": {"c": 84}, "v": [1, 3]}
]
输出: [
    {"id": 1, "b": {"c": 84}, "v": [1, 3], "y": 48}
]
解释:具有 id 为 1 的对象合并在一起。对于键 "b" 和 "v" ,使用 arr2 中的值。由于键 "y" 只存在于 arr1 中,因此取 arr1 的值。

提示:

  • arr1 和 arr2 都是有效的 JSON 数组
  • 在 arr1 和 arr2 中都有唯一的键值 id
  • 2 <= JSON.stringify(arr1).length <= 106
  • 2 <= JSON.stringify(arr2).length <= 106

思路:利用es6引入的扩展运算符,两个对象中有相同的属性,后面的会覆盖前面的

javascript 复制代码
var join = function(arr1, arr2) {
    arr1.push(...arr2)
    arr1.sort(function(a,b){
        return a.id - b.id
    })
   let new_arr = []
    for(let i = arr1.length-1;i>0;i--){
        if(arr1[i].id == arr1[i-1].id){
            arr1[i-1] = {...arr1[i-1],...arr1[i]}
        }else{
            new_arr.push(arr1[i])
        }
    }
     new_arr.push(arr1[0])
     return new_arr.reverse()
};
相关推荐
深入理解GEE云计算10 分钟前
遥感生态指数(RSEI):理论发展、方法论争与实践进展
javascript·人工智能·算法·机器学习
IT_陈寒14 分钟前
从2秒到200ms:我是如何用JavaScript优化页面加载速度的🚀
前端·人工智能·后端
天天向上102425 分钟前
vue 网站导航栏
前端·javascript·vue.js
云外天ノ☼33 分钟前
一、Node.js入门实战指南:从零搭建你的第一个后端
前端·javascript·笔记·node.js
未来之窗软件服务1 小时前
未来之窗昭和仙君(四十八)开发商品进销存修仙版——东方仙盟筑基期
前端·仙盟创梦ide·东方仙盟·昭和仙君·东方仙盟架构
安卓开发者1 小时前
第4讲:理解Flutter的灵魂 - “Everything is a Widget”
开发语言·javascript·flutter
风清云淡_A1 小时前
【REACT16】react老项目版本依赖适配问题
前端·react.js
jump6801 小时前
【react】 useEffect
前端
前端小咸鱼一条1 小时前
16.React性能优化SCU
前端·react.js·性能优化
起风了___2 小时前
Flutter 全局音频播放单例实现(附完整源码)——基于 just_audio 的零依赖方案
前端·flutter