![](/img/trans.png)
[英]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.