neolaser
neolaser

Reputation: 6907

Javascript arrays of Objects; Subtract one from another

Put simply, I want to subtract one array from another.

The arrays are arrays of objects. I understand I can cycle through one array and on each item, comparing values in the other array, but that just seems a little messy.

Thanks for the help, hopefully this question isnt too basic, I have tried googling it with no luck :(

EDIT:

The Objects in the Arrays I wish to remove will have identical values but are NOT the same object (thanks @patrick dw). I am looking to completely remove the subset from the initial array.

Upvotes: 12

Views: 19142

Answers (4)

Eduardo Assis
Eduardo Assis

Reputation: 11

It should remove all values from list a, which are present in list b keeping their order.

  let a = [0, 2, 5, 6, 1];
  let b = [2, 6, 2, 5, 0];

  function arrayDiff() {
    for (i of b) {
      for (j of a) {
        if (i === j) {
          a.splice(a.indexOf(j), 1);
        }
      }
    }
    return a;
  }

Upvotes: 1

Adrian Dymorz
Adrian Dymorz

Reputation: 967

This answer is copied from https://stackoverflow.com/a/53092728/7173655, extended with a comment and a solution with objects.

The code filters array A. All values included in B are removed from A.

const A = [1, 4, 3, 2]
const B = [0, 2, 1, 2]
console.log(A.filter(n => !B.includes(n)))

The same with objects:

const A = [{id:1}, {id:4}, {id:3}, {id:2}]
const B = [{id:0}, {id:2}, {id:1}, {id:2}]
console.log(A.filter(a => !B.map(b=>b.id).includes(a.id)))

Upvotes: 32

sissonb
sissonb

Reputation: 3780

http://phpjs.org/functions/index

There is no built-in method to do this in JavaScript. If you look at this site there are a lot of functions for arrays with similar syntax to PHP.

Upvotes: 3

Marnix
Marnix

Reputation: 6547

http://www.jslab.dk/library/Array

This site has some js functions on "sets"

I think you need the diff function.

Upvotes: 2

Related Questions