合并两个具有不同键但值相同的无序对象? [英] Merge two unordered objects with different keys but same value?

查看:90
本文介绍了合并两个具有不同键但值相同的无序对象?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

合并obj1和obj2之类的对象以在javascript中获取obj3.

Merge objects like obj1 and obj2 to get obj3 in javascript.

obj1 = [{fruit: 'watermelon', sweetness: 3},{fruit: 'banana', sweetness: 4},{fruit: 'apple', sweetness: 5}]
obj2 = [{fruit_name: 'apple', color: 'red'},{fruit_name: 'banana', color:'yellow'},{fruit_name: 'watermelon', color:'green'}]

obj3 = [{fruit_name: 'apple', color: 'red', sweetness: 5},{fruit_name: 'banana', color:'yellow', sweetness: 4},{fruit_name: 'watermelon', color:'green', sweetness: 3}]

推荐答案

您可以先通过使用 #map() >功能-参见下面的演示:

You can first create a hashtable by merging similar objects using #forEach and then extract the required array using a #map() function - see demo below:

var obj1 = [{fruit: 'watermelon', sweetness: 3},{fruit: 'banana', sweetness: 4},{fruit: 'apple', sweetness: 5}],
  obj2 = [{fruit_name: 'apple', color: 'red'},{fruit_name: 'banana', color:'yellow'},{fruit_name: 'watermelon', color:'green'}], hash = {};

// function to create a hashtable
function classify(e) {
   if(hash[e.fruit] || hash[e.fruit_name]) {
     Object.keys(e).forEach(function(c){
        hash[e.fruit || e.fruit_name][c] = e[c];
     });
   } else {
     hash[e.fruit_name || e.fruit] = e;
   }
}

// add to hash
obj1.forEach(classify);
obj2.forEach(classify);

// extract the result
var obj3 = Object.keys(hash).map(function(e){
  delete hash[e]['fruit'];
  return hash[e];
});

console.log(obj3);

.as-console-wrapper{top:0;max-height:100%!important;}

这篇关于合并两个具有不同键但值相同的无序对象?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆