首页 > 解决方案 > 检查另一个对象数组中是否缺少一个对象数组的字段

问题描述

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

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}
]

我尝试循环遍历两者中的每个元素,但是当我在数组中有很多元素时,它被证明很慢。

标签: javascriptarraysobject

解决方案


使用forEach循环和filter

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.forEach((e)=>{
array1.filter(k=>e.email==k.email).length==0?e.active="false":false;
})
console.log(array2)


推荐阅读