Skip to content Skip to sidebar Skip to footer

Javascript Split From An Array Of Objects Into 2 Arrays Of Matching And Non-matching Items

How to separate match unpatch data base on user_id array data ? for putting string into user_id includes does work fine but putting array into user_id it does not work

Solution 1:

Use Array#some() if you want any match or Array#every() if you need all to match

const users=[{_id:"5fbfa729fc46a415ce5503a6",first_name:"Allen",last_name:"Border",timestamp:1606395689121,key:["5fbf6f91aff7f3320a906547","5fbfa748fc46a415ce5503a8"]},{_id:"5fbfa6fbfc46a415ce5503a4",first_name:"james",last_name:"roger",timestamp:1606395689125},{_id:"5fbf6f91aff7f3320a906547",first_name:"david",last_name:"gosh",timestamp:1606395689130,key:["5fbfa729fc46a415ce5503a6"]},{_id:"5e4e74eb380054797d9db623",first_name:"Ricky",last_name:"bichel",timestamp:1606395689131}]
const user_id=["5fbfa748fc46a415ce5503a8", "5fbf6f91aff7f3320a906547"]

const {matching, nonMatching} = users.reduce((acc, userRecord) => {
  userRecord.key && userRecord.key.some(key=> user_id.includes(key))
    ? acc.matching.push(userRecord)
    : acc.nonMatching.push(userRecord)
  return acc
}, {matching: [], nonMatching: []})

console.log(matching)

Solution 2:

includes method can handle only primitive values, but you put into it an array. This can help I think.

const users=[{_id:"5fbfa729fc46a415ce5503a6",first_name:"Allen",last_name:"Border",timestamp:1606395689121,key:["5fbf6f91aff7f3320a906547","5fbfa748fc46a415ce5503a8"]},{_id:"5fbfa6fbfc46a415ce5503a4",first_name:"james",last_name:"roger",timestamp:1606395689125},{_id:"5fbf6f91aff7f3320a906547",first_name:"david",last_name:"gosh",timestamp:1606395689130,key:["5fbfa729fc46a415ce5503a6"]},{_id:"5e4e74eb380054797d9db623",first_name:"Ricky",last_name:"bichel",timestamp:1606395689131}]
const user_id=["5fbfa748fc46a415ce5503a8", "5fbf6f91aff7f3320a906547"]

const {matching, nonMatching} = users.reduce((acc, userRecord) => {
  userRecord.key && userRecord.key.every(key => user_id.includes(key))
    ? acc.matching.push(userRecord)
    : acc.nonMatching.push(userRecord)
  return acc
}, {matching: [], nonMatching: []})

console.log(matching)

Solution 3:

This solution should work.

const users=[{_id:"5fbfa729fc46a415ce5503a6",first_name:"Allen",last_name:"Border",timestamp:1606395689121,key:["5fbf6f91aff7f3320a906547","5fbfa748fc46a415ce5503a8"]},{_id:"5fbfa6fbfc46a415ce5503a4",first_name:"james",last_name:"roger",timestamp:1606395689125},{_id:"5fbf6f91aff7f3320a906547",first_name:"david",last_name:"gosh",timestamp:1606395689130,key:["5fbfa729fc46a415ce5503a6"]},{_id:"5e4e74eb380054797d9db623",first_name:"Ricky",last_name:"bichel",timestamp:1606395689131}]
const user_id=["5fbfa748fc46a415ce5503a8", "5fbf6f91aff7f3320a906547"]

const {matching, nonMatching} = users.reduce((acc, userRecord) => {
  userRecord.key && userRecord.key.find(userRecordKeyItem => user_id.find(userIdItem => userIdItem === userRecordKeyItem))
    ? acc.matching.push(userRecord)
    : acc.nonMatching.push(userRecord)
  return acc
}, {matching: [], nonMatching: []})

console.log(matching)

Solution 4:

You can use a simple forEach with an if else block

const users =[{_id:"5fbfa729fc46a415ce5503a6",first_name:"Allen",last_name:"Border",timestamp:1606395689121,key:["5fbf6f91aff7f3320a906547","5fbfa748fc46a415ce5503a8"]},{_id:"5fbfa6fbfc46a415ce5503a4",first_name:"james",last_name:"roger",timestamp:1606395689125},{_id:"5fbf6f91aff7f3320a906547",first_name:"david",last_name:"gosh",timestamp:1606395689130,key:["5fbfa729fc46a415ce5503a6"]},{_id:"5e4e74eb380054797d9db623",first_name:"Ricky",last_name:"bichel",timestamp:1606395689131}]
const user_id=["5fbfa748fc46a415ce5503a8", "5fbf6f91aff7f3320a906547"]
    
const matches = [];
const dismatches = [];
users.forEach(user => {
       if(user_id.includes(user._id)) {
         matches.push(user);
       } else {
         dismatches.push(user);
      }
});
console.log({matches ,dismatches });

Post a Comment for "Javascript Split From An Array Of Objects Into 2 Arrays Of Matching And Non-matching Items"