繁体   English   中英

如何通过两个对象的相同值创建对象?

[英]How to create object by identical values from 2 objects?

我试图通过比较 2 个对象来创建一个对象,如果有相同的 id - 然后创建一个对象。

例如 :

obj1 = [{"id":1,"name":"john"},{"id":2,"name":"kile"},{"id":3,"name":"kenny"},
{"id":4,"name":"stan"}]

obj2 = [{"id":1,"name":"dan"},{"id":1,"name":"ben"},{"id":1,"name":"sarah"},
{"id":2,"name":"kelly"}]

我正在寻找的结果是:

result = [{1:{"id":1,"name":"john"},{"id":1,"name":"dan"},
    {"id":1,"name":"ben"},{"id":1,"name":"sarah"},

 //both objects from obj1 & obj 2 which holds the same ID are now in new 
  object "1" - which is the id that's common to them//

{2:{{"id":2,"name":"kile"},
{"id":2,"name":"kelly"}}}]

更明确地说:

  1. 在匹配 id 的两个对象中查找
  2. 将它们堆叠在一个对象中...因此新对象将包含来自它们的匹配 id 对象....

我试过了 :

var obj_names_1 = [{"id":1,"name":"john"},{"id":2,"name":"kile"},
{"id":3,"name":"kenny"},
{"id":4,"name":"stan"}];

var obj_names_2 = [{"id":1,"name":"dan"},{"id":1,"name":"ben"},
{"id":1,"name":"sarah"},
{"id":2,"name":"kelly"}];

 function getMessages(obj1, obj2){
    var messages_tab = [];
    $.each(obj1, function(){

        var messages_wrap = this;
        var recieved_messages_id = this.id;
        $.each(obj2, function(){
            var sent_messages_id = this.id;
            if(recieved_messages_id == sent_messages_id){


                messages_tab.push({1:[this,messages_wrap]}); // key 0 should 
                be the common id

            }

        });
    });
    return messages_tab;
}

console.log(getMessages(obj_names_1,obj_names_2));

但这里的第一个问题是它不会推送超过 1 个结果

小提琴

您可以array#concat两个数组,然后使用array#reduce将对象推送到具有相同id数组中。

注意: id对应的值应该是数组。

 var obj1 = [{"id":1,"name":"john"},{"id":2,"name":"kile"},{"id":3,"name":"kenny"},{"id":4,"name":"stan"}], obj2 = [{"id":1,"name":"dan"},{"id":1,"name":"ben"},{"id":1,"name":"sarah"},{"id":2,"name":"kelly"}] result = obj1.concat(obj2).reduce((r,o) => { r[o.id] = r[o.id] || []; r[o.id].push(o); return r; },{}); console.log(result);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM