leetCode2722 JS/TS专项 根据 ID 合并两个数组

先看题目:

示例: 

 

 

 

我的思路:

       根据题目要求,可以直接采用哈希表存入两个数组的元素,键值对为<id, item>,item就是数组中的每个元素,首先存入arr1的元素,然后再遍历arr2,根据题目要求,如果哈希表中有与arr2中元素同名的id,arr1相同的键值对就替换成arr2的,不同的直接保留。要实现这个需求,可以自己写一个方法来实现,可以利用到Object.hasOwnProperty()方法,合并时需要注意的是不能打乱原来键值对的顺序,意思是如果arr2中单独出现的键值对在合并时就只能添加到对象的后面。这里我们可以直接使用Object.assign()方法,非常方便,最后,将哈希表中的值根据id升序排个序再转换为数组返回即可。

代码:

JavaScript:

   // 根据 ID 合并两个数组
   function join(arr1, arr2) {
      const hashMap = new Map();

      // 将arr1存入哈希表中,键为id,值为数组元素
      for (const item of arr1) {
         const { id } = item;
         hashMap.set(id, item);
      }

      // 遍历arr2,将元素存入哈希表中
      for (let item of arr2) {
         const { id } = item;

         // 如果表中有跟arr2中元素相同的id,就将两个对象进行合并再存入
         if (hashMap.has(id)) {
            const cur = hashMap.get(id);
            item = Object.assign(cur, item);

            hashMap.set(id, item);
            continue;
         }

         // 没有则直接存入
         hashMap.set(id, item);
      }

      // 排序后以数组返回
      return [...hashMap.values()].sort((a, b) => { return a['id'] - b['id']; });
   };

   console.log(join([
      { "id": 1, "b": { "b": 94 }, "v": [4, 3], "y": 48 }
   ], [
      { "id": 1, "b": { "c": 84 }, "v": [1, 3] }
   ]));

TypeScript:

function join(arr1: any[], arr2: any[]): any[] {
   const hashMap: Map<number, object> = new Map<number, object> ();

   for(const item of arr1) {
       const { id } = item;
       hashMap.set(id, item);
   }

   for(let item of arr2) {
       const { id } = item;

       if(hashMap.has(id)) {
          const cur: object = hashMap.get(id);
          item = Object.assign(cur, item);

          hashMap.set(id, item);
          continue;
       }

       hashMap.set(id, item);
   }

   return [...hashMap.values()].sort((a, b) => {return a['id'] - b['id'];});
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值