簡體   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