code44
code44

Reputation: 1

How to compare two array of objects by mutiple properties using javascript

I have two array of objects in which if property grp from arrobj1 is

same as SERVICE and ISACTIVE is true from arrobj2, then return array of object using

javascript

Tried

let result = arrobj1.filter(e=> 
 arrobj2.some(i=> i.ISACTIVE===true && e.grp === i.SERVICE);
);

var arrobj1=[
  {
    id:"SetupFS",
    grp:"fs",
    title: "xxx"
  },
  {
    id:"ExtendFS",
    grp:"fs",
    title: "yyy"
  },
  {
    id:"RebootServer",
    grp:"os",
    title: "yyy"
  },
]

var arrobj2=[
{id:1, ISACTIVE:true, TASK:'SetupFS', SERVICE: "fs" }, 
{id:2, ISACTIVE:false, TASK:'RebootServer', SERVICE:"os" }, 
{id:3, ISACTIVE:false, TASK:'ExtendFS', SERVICE: "fs" }, 
]



Expected Result

[
 {
    id:"SetupFS",
    grp:"fs",
    title: "xxx"
  }
 
]

Upvotes: 0

Views: 44

Answers (2)

Azzy
Azzy

Reputation: 1731

A simpler method

// gets two results wit the equals
let filteredList = [];
for (const item of arrobj1) {
 // include TASK === item.id to get the expected answer
 const inArray = arrobj2.find(e => e.ISACTIVE && e.TASK === item.id &&  e.SERVICE === item.grp);
  if (inArray) {
    filteredList.push(item)
  }
}

console.log(filteredList)

with filters in the question it returns two items e => e.ISACTIVE && e.SERVICE === item.grp

0: Object
   id: "SetupFS"
   grp: "fs"
   title: "xxx"
1: Object
   id: "ExtendFS"
   grp: "fs"
   title: "yyy"

Hope it helps

but if this is not what was expected, I'll delete the answer

Upvotes: 0

Mina
Mina

Reputation: 17049

You don't need filter for second item, you need to check if the item with corresponding index in arrobj1 with grp value equal to SERVICE value in arrobj2

var arrobj1=[
  {
    id:"SetupFS",
    grp:"fs",
    title: "xxx"
  },
  {
    id:"ExtendFS",
    grp:"fs",
    title: "yyy"
  },
  {
    id:"RebootServer",
    grp:"os",
    title: "yyy"
  },
]

var arrobj2=[
{id:1, ISACTIVE:true, TASK:'SetupFS', SERVICE: "fs" }, 
{id:2, ISACTIVE:false, TASK:'RebootServer', SERVICE:"os" }, 
{id:3, ISACTIVE:false, TASK:'ExtendFS', SERVICE: "fs" }, 
]

let result = arrobj2.filter((item, i) => 
 item.SERVICE === arrobj1[i].grp
);

console.log(result)

Upvotes: 1

Related Questions