[英]How to remove identical objects from an array checking all of the objects values?
[英]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"}}}]
更明確地說:
我試過了 :
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.