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

Time:11-26

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

CodePudding user response:

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)

CodePudding user response:

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

  • Related