Filter

Retrieve objects in an array of objects that don't exist in another array of objects.

var all = [
  {
    "id": 1,
    "published": true
  },
  {
    "id": 2,
    "published": true
  },
  {
    "id": 3,
    "published": false
  },
  {
    "id": 4,
    "published": false
  }
]

var selected = [
  {
    "id": 2,
    "published": true
  },
  {
    "id": 4,
    "published": false
  }
]

Solution 1

let filtered = [];

all.forEach(aItem => {
	if (!selected.some(sItem => aItem.id === sItem.id )) {
  	filtered.push(aItem);
  }
})

console.log(filtered);

https://codepen.io/ozywuli/pen/VqZBQr

Solution 2

let filtered = all.filter(aItem => {
   return selected.every(sItem => {
      return aItem.id !== sItem.id;
   })
})

console.log(filtered);

https://codepen.io/ozywuli/pen/KbPBBP