Given array of objects arr1 and arr2
check every object in array
taskId of arr1 and id of arr2 are equal,
and
and null taskid, remove and returning the arr2 values in javascript
if both array of object has same id and taskid, if arr2 has null value in taskid, return reamining object arrary in arr2 using javascript
tried
const result = arr2.map(async task => {!arr1.some(arr1 => arr1.taskId === task.id)})
var arr1 =[
{
"name": "sample task",
"memberIds": [
981,
983
],
"dueOn": "2022-08-31",
"taskId": 10
},
{
"name": "skills one more",
"memberIds": [
981,
983,
984
],
"dueOn": "2022-08-31",
"taskId": null
},
{
"name": "new task one",
"memberIds": [
982,
983
],
"dueOn": "2022-08-2",
"taskId": 15
},
]
var arr2 =[
{
"id": 10,
"createdAt": "2022-08-02T09:10:07.000Z",
"createdBy": 21,
"updatedAt": null,
"updatedBy": null,
"statusId": 6207,
"caseGoalId": 11,
"name": "sample task",
"dueOn": "2022-08-31"
}
]
Expected Output
[{
"name": "new task one",
"memberIds": [
982,
983
],
"dueOn": "2022-08-2",
"taskId": 15
}]
CodePudding user response:
You need to filter arr1, and on each item inside, you need to check if exist in the arr2 and return if it exist or if the item id equal null
var arr1 =[
{
"name": "sample task",
"memberIds": [
981,
983
],
"dueOn": "2022-08-31",
"taskId": 10
},
{
"name": "skills one more",
"memberIds": [
981,
983,
984
],
"dueOn": "2022-08-31",
"taskId": null
},
{
"name": "new task one",
"memberIds": [
982,
983
],
"dueOn": "2022-08-2",
"taskId": 15
},
]
var arr2 =[
{
"id": 10,
"createdAt": "2022-08-02T09:10:07.000Z",
"createdBy": 21,
"updatedAt": null,
"updatedBy": null,
"statusId": 6207,
"caseGoalId": 11,
"name": "sample task",
"dueOn": "2022-08-31"
}
]
const result = arr1.filter(item => item.id === null || arr2.some(i => i.id === item.taskId))
console.log(result)
CodePudding user response:
There must be some missing information. There's no way to get the expected output with these requirements. Your taskId's from arr1 are 10, null, & 15. The only id in arr2 is 10 therefore you would never get this output:
[{
"name": "new task one",
"memberIds": [
982,
983
],
"dueOn": "2022-08-2",
"taskId": 15
}]
but instead get:
[{
"name": "sample task",
"memberIds": [
981,
983
],
"dueOn": "2022-08-31",
"taskId": 10
}]
CodePudding user response:
This is a way you can do it...
Time complexity O(N^2)
const check = (arr1, arr2) => {
for (let i = 0; i < arr1.length; i ) {
for (let j = 0; j < arr2.length; j ) {
if (arr1[i] === null) {
return [...arr2];
}
if (arr1[i].taskId !== null && arr1[i].taskId === arr2[j].id) {
return { ...arr1[i] };
}
// ...more checks...
}
}
};
