JavaScript: rimuovere i valori duplicati da un array di oggetti

Short link

In JavaScript esiste una soluzione molto semplice per rimuovere i valori duplicati da un array di oggetti.

Poiché la soluzione moderna che usa l'oggetto Set funziona unicamente con array composti da valori primitivi, possiamo convertire gli oggetti dell'array in stringhe JSON e quindi riconvertirli in oggetti dopo aver ottenuto valori univoci.

'use strict';

const arrOfObjects = [
    {
        id: 1,
        sku: 'ABC'
    },
    {
        id: 2,
        sku: 'CDE'
    },
    {
        id: 1,
        sku: 'ABC'
    },
    {
        id: 3,
        sku: 'LHX'
    },
    {
        id: 2,
        sku: 'CDE'
    },
    {
        id: 4,
        sku: 'ZKU'
    }

];

const serializeArr = arr => {
    return arr.map(obj => { return JSON.stringify(obj); });
};

const arrayUnique = arr => {
    let objects = serializeArr(arr);
    let unique = [...new Set(objects)];
    return unique.map(str => { return JSON.parse(str); } );
};

Testiamo la nostra soluzione:

const test = () => {
    console.log('Initial array:');
    console.log(arrOfObjects);
    console.log('Unique array:');
    console.log(arrayUnique(arrOfObjects));
};

test();

Output:

Initial array:
[ { id: 1, sku: 'ABC' },
  { id: 2, sku: 'CDE' },
  { id: 1, sku: 'ABC' },
  { id: 3, sku: 'LHX' },
  { id: 2, sku: 'CDE' },
  { id: 4, sku: 'ZKU' } ]
Unique array:
[ { id: 1, sku: 'ABC' },
  { id: 2, sku: 'CDE' },
  { id: 3, sku: 'LHX' },
  { id: 4, sku: 'ZKU' } ]