使用下划线或纯JavaScript合并两个对象

时间:2018-08-12 13:09:47

标签: javascript merge underscore.js

我很难合并来自javascript的两个对象,我使用下划线并尝试了许多尝试,但用谷歌搜索,但是我无法实现我的目标,请参见下面的两个对象:

// Obj A
   [{  
      "activite":"Danser le rock",
      "categorie":"Activités physiques",
      "selected":true
   },
   {  
      "activite":"Danses latino",
      "categorie":"Activités physiques",
      "selected":true
   }]

// Obj B
  [{  
    "activite":"Danser le rock",
    "categorie":"Activités physiques",
  },
  {  
        "activite":"Danses latino",
        "categorie":"Activités physiques",
  }, 
  {  
      "categorie":"Activités physiques",
      "activite":"Danses latino"
 }]

这是一次尝试

function updateCentres(obj1, obj2) {
   for (var p in obj2) {
      if (obj1[p]) {
         _.extend(obj1[p], obj2[p]);
      } else {
       obj1[p] = obj2[p];
      }
  }
}
updateCentres(objA, objB) //<== outputs undefined

在这里,我必须从objA更新objB,事实上我想将selected:true注入对应的内容,有人可以帮我吗? 谢谢。

1 个答案:

答案 0 :(得分:1)

实际上,您的对象是可以用for .. of轻松迭代的数组。现在,您可以通过遍历objA(不好意思,只是说一遍)将每个活动映射到所选属性,然后可以遍历objB并添加该所选属性:

  const isSelected = new Map();

  for(const { activite, selected } of objA)
   isSelected.set(activite, selected);

  for(const event of objB)
    event.selected = isSelected.get(event.activite);