Javascript 检查另一个对象数组中是否缺少一个对象数组的字段

Javascript 检查另一个对象数组中是否缺少一个对象数组的字段,javascript,arrays,object,Javascript,Arrays,Object,假设我们有这样一个对象数组: var array1 = [ {first_name: 'Bob', last_name: 'Jones', email: 'bobjones@gmail.com'}, {first_name: 'Susan', last_name: 'Anderson', email: 'susananderson@gmail.com'} ] var array2 = [ {first_name: 'Bob', last_name: 'Jones', email: 'b

假设我们有这样一个对象数组:

var array1 = 
[
 {first_name: 'Bob', last_name: 'Jones', email: 'bobjones@gmail.com'},
 {first_name: 'Susan', last_name: 'Anderson', email: 'susananderson@gmail.com'}
]

var array2 =
[
 {first_name: 'Bob', last_name: 'Jones', email: 'bobjones@gmail.com'},
 {first_name: 'Susan', last_name: 'Anderson', email: 'susananderson@gmail.com'},
 {first_name: 'John', last_name: 'Smith', email: 'johnsmith@gmail.com'}
]
我想根据电子邮件地址检测array2中是否缺少任何行,如果缺少,则将新的状态
active
设置为false,以便最终数组将显示为:

var array3 = [
 {first_name: 'Bob', last_name: 'Jones', email: 'bobjones@gmail.com'},
 {first_name: 'Susan', last_name: 'Anderson', email: 'susananderson@gmail.com'},
 {first_name: 'John', last_name: 'Smith', email: 'johnsmith@gmail.com', active: false}
]

我尝试在这两个数组中循环每个元素,但当数组中有很多元素时,循环速度很慢。

使用
forEach
循环和
过滤器

var数组1=
[
{名字:“鲍勃”,姓氏:“琼斯”,电子邮件:'bobjones@gmail.com'},
{名字:“苏珊”,姓氏:“安德森”,电子邮件:'susananderson@gmail.com'}
]
var array2=
[
{名字:“鲍勃”,姓氏:“琼斯”,电子邮件:'bobjones@gmail.com'},
{名字:“苏珊”,姓氏:“安德森”,电子邮件:'susananderson@gmail.com'},
{名字:“约翰”,姓氏:“史密斯”,电子邮件:'johnsmith@gmail.com'}
]
数组2.forEach((e)=>{
array1.filter(k=>e.email==k.email).length==0?e.active=“false”:false;
})
console.log(array2)
您可以使用和

  • 将array1更改为
    Map
    ,以便可以在O(1)中访问来自array1的电子邮件
  • 在数组2上循环,根据
    newMap
让数组1=[{名字:“鲍勃”,姓氏:“琼斯”,电子邮件:'bobjones@gmail.com{姓:“苏珊”,姓:“安德森”,电子邮件:'susananderson@gmail.com'}]
让array2=[{名字:'Bob',姓氏:'Jones',电子邮件:'bobjones@gmail.com{姓:“苏珊”,姓:“安德森”,电子邮件:'susananderson@gmail.com{姓:约翰,姓:史密斯,电子邮件:'johnsmith@gmail.com'}]
让newMap=newMap(array1.Map({email})=>[email,true]))
让final=array2.map(obj=>({
…obj,
…(!newMap.has(obj.email)&&{active:false})
})
)

console.log(最终版)
您可以维护一组来自array1的所有电子邮件,然后在array2上使用
Array.map()
,以获得所需的结果:

让数组1=[{名字:“鲍勃”,姓氏:“琼斯”,电子邮件:'bobjones@gmail.com{姓:“苏珊”,姓:“安德森”,电子邮件:'susananderson@gmail.com'} ]
让array2=[{名字:'Bob',姓氏:'Jones',电子邮件:'bobjones@gmail.com{姓:“苏珊”,姓:“安德森”,电子邮件:'susananderson@gmail.com{姓:约翰,姓:史密斯,电子邮件:'johnsmith@gmail.com'} ];
设set=newset(array1.map(({email})=>email));
设array3=array2.map(o=>{
如果(!set.has(o.email))
o、 主动=假;
返回o;
});
控制台日志(array3)