繁体   English   中英

如何检查数组是否包含对象

[英]How to check if array contains objects

我有从json创建的数组:

var array = [{"name":"name1","group":"group1","id":"123", ...},
{"name":"name2","group":"group2","id":"456", ...},
{"name":"name3","group":"group1","id":"789", ...}];

得到另一个数组后:

var array1 = [{"name":"name1","group":"group1","id":"123", ...},
{"name":"name4","group":"group1","id":"987", ...}]

我需要将项目从第二个数组推到第一个,但是如何检查第一个数组是否包含第二个数组的对象?

数组中的每个对象都包含更多属性,其中一些是动态创建的,因此我无法通过indexOf()检查。 我发现的所有解决方案仅适用于Int类的简单对象。 例如,如果我可以通过属性“ id”进行检查,那就太好了。

首先使用find

var newObj = {"name":"name2","group":"group2","id":"456"};
var value = array.find( s => s.id == newObj.id );  

现在,如果找不到该value则推送

if ( !value )
{
   array.push( newObj ) 
}

(更通用)您可以使用以下代码执行这一行(它将添加所有不在数组中的对象)。

array.concat(array1.filter(x=>!array.find(s=>s.id==x.id)));

 var array = [{"name":"name1","group":"group1","id":"123"}, {"name":"name2","group":"group2","id":"456" }, {"name":"name3","group":"group1","id":"789"}]; var array1 = [{"name":"name1","group":"group1","id":"123"}, {"name":"name4","group":"group1","id":"987"}]; array=array.concat(array1.filter(x=>!array.find(s=>s.id==x.id))); console.log(array); 

暂无
暂无

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

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