【问题标题】:Merge two objects using underscore or plain javascript使用下划线或纯 javascript 合并两个对象
【发布时间】:2023-03-23 20:32:01
【问题描述】:

我很难从 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 注入到对应的部分,有人可以帮助我吗? 谢谢。

【问题讨论】:

  • 这里的“合并”到底是什么意思?你有两个数组。你想连接数组吗?还有什么?
  • objB = objA 也许?
  • 数组的条目是否总是以相同的顺序排列? (也就是说,Obj A 首先有“Danser le rock”,Obj B 也是如此;这可靠吗?)
  • @T.J.Crowder,A和B顺序不一样
  • @HyyanAboFakher - 不要这么认为,这是更新对象数组,通过属性关联它们,而不是更新非数组对象。

标签: javascript merge underscore.js


【解决方案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);

【讨论】:

  • 如果只是设置selected属性,这是一个很好的方法。
猜你喜欢
  • 2018-09-14
  • 2012-08-25
  • 1970-01-01
  • 2018-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多