![](/img/trans.png)
[英]Check if object from one array is included inside another array of objects
[英]Check if field of one array of objects is missing from another array of objects
假設我們有一系列這樣的對象:
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'}
]
我想,如果在任何數組2排是基於電子郵件地址缺少檢測,如果它缺少設置一個新的狀態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
循環和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)
Map
,以便可以在O(1)中完成來自array1的訪問電子郵件 newMap
是否存在電子郵件有條件地添加active
密鑰 let array1 = [{first_name: 'Bob', last_name: 'Jones', email: 'bobjones@gmail.com'},{first_name: 'Susan', last_name: 'Anderson', email: 'susananderson@gmail.com'}] let 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'}] let newMap = new Map(array1.map(({email})=>[email,true])) let final = array2.map(obj=>({ ...obj, ...(!newMap.has(obj.email) && {active: false}) }) ) console.log(final)
您可以維護一組來自array1的所有電子郵件,然后在array2上使用Array.map()
獲得所需的結果:
let array1 = [ {first_name: 'Bob', last_name: 'Jones', email: 'bobjones@gmail.com'}, {first_name: 'Susan', last_name: 'Anderson', email: 'susananderson@gmail.com'} ] let 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'} ]; let set = new Set(array1.map(({email})=> email)); let array3 = array2.map(o =>{ if(!set.has(o.email)) o.active = false; return o; }); console.log(array3);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.