Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Examine duplicate elements in two arrays in JavaScript [duplicate]

I have two arrays, I want these two to be combined and duplicate items are not lit and only new items are added and I see the combined array in the console I also want to see the duplicate item in the list on the console I mean, I need two outputs, one to tell me what a duplicate is, and one to show me a new array of combinations of two arrays without duplicates. I wrote this code but it does not work properly Thanks for guiding me

Expected output:

newContact : [
  {
    "id": 1,
    "name": "Oliver"
  },
  {
    "id": 2,
    "name": "Liam"
  }
   {
    "id": 3,
    "name": "James"
  }
   {
    "id": 4,
    "name": "Lucas"
  }
]
duplicateContacts: Oliver

let array1 = [
  { id: 1, name: "Oliver" },
  { id: 2, name: "Liam" },
];
let array2 = [
  { id: 1, name: "Oliver" },
  { id: 3, name: "James" },
  { id: 4, name: "Lucas" },
];
let newContact = array1.filter((item) => item.id !== array2.id);
console.log("newContact :", newContact);
console.log("duplicateContacts:");
like image 960
Good Avatar asked Jul 25 '26 06:07

Good


2 Answers

Guess duplicate meaning the same id, add array entries to a map to find duplicates, and the map contains unique items

const array1 = [
  { id: 1, name: "Oliver" },
  { id: 2, name: "Liam" },
];
const array2 = [
  { id: 1, name: "Oliver" },
  { id: 3, name: "James" },
  { id: 4, name: "Lucas" },
];

const duplicates = [];
const map = new Map();

const fill = (array) => array.forEach(item => {
  if (map.has(item.id)) {
    duplicates.push(item);
  } else {
    map.set(item.id, item);
  }
});

fill(array1);
fill(array2);

console.log(duplicates);
console.log([...map.values()]);

Edit

To take arrays as input, create a function

const inspect = (...arrays) => {
    const duplicates = [];
    const map = new Map();

    const fill = (array) => array.forEach(item => {
      if (map.has(item.id)) {
        duplicates.push(item);
      } else {
        map.set(item.id, item);
      }
    });

    arrays.forEach(array => fill(array));

    console.log(duplicates);
    console.log([...map.values()]);
};


const array1 = [
  { id: 1, name: "Oliver" },
  { id: 2, name: "Liam" },
];
const array2 = [
  { id: 1, name: "Oliver" },
  { id: 3, name: "James" },
  { id: 4, name: "Lucas" },
];

inspect(array1, array2);
like image 157
ProGu Avatar answered Jul 27 '26 20:07

ProGu


with three methods :

  • filter to get an array of duplicate element

  • map to recover only an array of one column

  • some to describe how object in array should be compared

     const duplicates = array1.filter(value => array2.some(oneElement => oneElement.id === value.id));
    const duplicatesId = array1.filter(value => array2.some(oneElement => oneElement.id === value.id)).map(oneElement => oneElement.id);
    
    
    const mergedArray = [ 
     ...array1, 
     ...array2.filter(value => !duplicatesId.some(oneDuplicate => oneDuplicate === value.id))
    ];
    

const array1 = [
  { id: 1, name: "Oliver" },
  { id: 2, name: "Liam" },
];

const array2 = [
  { id: 1, name: "Oliver" },
  { id: 3, name: "James" },
  { id: 4, name: "Lucas" },
];

const duplicates = array1.filter(value => array2.some(oneElement => oneElement.id === value.id));
const duplicatesId = array1.filter(value => array2.some(oneElement => oneElement.id === value.id)).map(oneElement => oneElement.id);


const mergedArray = [ 
  ...array1, 
  ...array2.filter(value => !duplicatesId.some(oneDuplicate => oneDuplicate === value.id))
];

console.log(duplicates);
console.log(duplicatesId);
console.log(mergedArray);
like image 39
jeremy-denis Avatar answered Jul 27 '26 20:07

jeremy-denis



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!