0

I'm trying to compare 2 array of objects together and remove the duplicates. For example...

var array1 = [0, 1, 2, 3, 4, 5, 6];
var array2 = [7, 8, 1, 2, 9, 10];

How can I check the array2 for any element of array1 and if true then remove that from array2 to eliminate the duplication.

The expected result: array 2 = [7, 8, 9, 10]

Any help would be appreciated, thanks

3

3 Answers 3

2

If the array include primitive types you can use indexOf and array#reduce

const array1 = [0, 1, 2, 3, 4, 5, 6]
const array2 = [7, 8, 1, 2, 9, 10]

var result = array2.filter((num) => {
  return array1.indexOf(num) === -1;
});

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

In case of an object, you can get the unique values in second array in comparison to first, please use array#reduce and array#some.

const person1 = [{"name":"a", "id":0},{"name":"A", "id":1},{"name":"B", "id":2},{"name":"C", "id":3},{"name":"D", "id":4},{"name":"E", "id":5},{"name":"F", "id":6}]
const person2 = [{"name":"G", "id":7},{"name":"H", "id":8},{"name":"A", "id":1},{"name":"B", "id":2},{"name":"I", "id":9}, {"name":"J", "id":10}]

var unique = person2.reduce((unique, o) => {
  let isFound = person1.some((b) => {
    return b.id === o.id;
  });
  if(!isFound)
    unique.push(o);
  return unique;
},[]);

console.log(unique);
.as-console-wrapper { max-height: 100% !important; top: 0; }

Sign up to request clarification or add additional context in comments.

1 Comment

This returns the same array. I want to compare against the IDs inside the objects in the array and remove the duplicates that have the same ID
1

just filter second array.

const array1 = [0, 1, 2, 3, 4, 5, 6];
const array2 = [7, 8, 1, 2, 9, 10];

const newArray = array2.filter(i => !array1.includes(i));

console.log(newArray);

1 Comment

This returns the same array. I want to compare against the IDs inside the objects in the array and remove the duplicates that have the same ID
1

You can use do this:

var array1 = [0, 1, 2, 3, 4, 5, 6];
var array2 = [7, 8, 1, 2, 9, 10];

/* run a filter function for every value in array2 and returned the final filtered array */
var array3 = array2.filter(function(currentValue, index, arr){
      return (array1.indexOf(currentValue) === -1); /* this will check whether currentValue exists in aray1 or not. */
});

console.log(array3) /* filtered array */

This should deliver what you want. Or another way:

var array1 = [0, 1, 2, 3, 4, 5, 6];
var array2 = [7, 8, 1, 2, 9, 10];
var duplicateRemoved = [];
/* run a function for every value in array2 and collect the unique value in a new array */
array2.forEach(function(currentValue, index, arr){
      if (array1.indexOf(currentValue) === -1) {
          duplicateRemoved.push(currentValue);
      }
});

console.log(duplicateRemoved)

This should work in your situation unless there are some other external factors associated with it.

1 Comment

Actually I thought this was working but it's returning the same array. Is there a way I can compare the slugs inside the array, not the index?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.