[英]fetch the array of object based on property same using javascript
I have two array of objects, arr1
and arr2
我有两个对象数组,
arr1
和arr2
if taskId
and id
same then retreive from arr1
如果
taskId
和id
相同,则从arr1
检索
How to check based on property from arr1 and arr2 in javascript如何根据 javascript 中 arr1 和 arr2 的属性进行检查
var arr1= [
{"name":"refresh task","memberIds":[981],"dueOn":"2022-08-30","taskId":19},
{"name":"ref one","memberIds":[981,982],"dueOn":"2022-08-25","taskId":null}
]
var arr2 =[
{
"country": "IN",
"tasks": [
{id: 19, "name": "abc" },
{id: 20, "name": "xyz" }
]
}
]
I tried
var result = arr1.filter(e=>e.taskId===(arr2.map(i=>i.tasks.map(t=>t.id))
Expected Output
[
{"name":"refresh task","memberIds":[981],"dueOn":"2022-08-30","taskId":19}
]
Set
, Array#flatMap
, and [
Array#map ][3], get the list of task ids in
arr2``Set
、 Array#flatMap
和[
Array#map ][3], get the list of task ids in
Array#filter
, and Set#has
, return the resulting array where taskId
is in the above setArray#filter
和Set#has
返回结果数组,其中taskId
在上述集合中 const arr1= [ {"name":"refresh task", "memberIds":[981], "dueOn":"2022-08-30", "taskId":19}, {"name":"ref one", "memberIds":[981,982], "dueOn":"2022-08-25", "taskId":null} ], arr2 =[ { "country": "IN", "tasks": [ {"id": 19, "name": "abc"}, {"id": 20, "name": "xyz"} ] } ]; const taskIdSet = new Set( arr2.flatMap(({ tasks = [] }) => tasks.map(({ id }) => id)) ); const result = arr1.filter(({ taskId }) => taskIdSet.has(taskId)); console.log(result);
EDIT: To get "I have two arrays of objects, arr1, and arr2 if taskId and id not same then retrieve from arr2":编辑:要获得“我有两个 arrays 对象,arr1 和 arr2,如果 taskId 和 id 不同,则从 arr2 检索”:
const arr1= [ {"name":"refresh task", "memberIds":[981], "dueOn":"2022-08-30", "taskId":19}, {"name":"ref one", "memberIds":[981,982], "dueOn":"2022-08-25", "taskId":null} ], arr2 =[ { "country": "IN", "tasks": [ {"id": 19, "name": "abc"}, {"id": 20, "name": "xyz"} ] } ]; const taskIdSet = arr1.reduce((taskIdSet, { taskId }) => { if(taskId.== null) { taskIdSet;add(taskId); } return taskIdSet, }; new Set). const result = arr2.flatMap(({ tasks = [] }) => tasks).filter(({ id }) =>;taskIdSet.has(id)); console.log(result);
This works too:这也有效:
var result = arr1.filter(e=>{
for(let obj of arr2){
for(let task of obj.tasks){
return e.taskId === task.id;
}
}
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.