2017-02-25 3 views
0

Ich habe eine folgende Liste in Javascript.Javascript - Entfernen Sie genaue doppelte Zeile aus Array

var list = [{ 
    ID: "2566", 
    NAME: "ENTERPRISE EXPENSE", 
    EXECUTE: "LOAD_DIMENTION", 
    TYPE: "PROCEDURE" 
    }, 
    { 
    ID: "1234", 
    NAME: "LOAD EXPENSE FACT", 
    EXECUTE: "LOAD_EXPENSE_FACT", 
    TYPE: "STORED PROCEDURE" 
    }, 
    { 
    ID: "RI0031", 
    NAME: "LOAD HEAD COUNT", 
    EXECUTE: "LOAD_HEADCOUNT_FACT", 
    TYPE: "STORED PROCEDURE" 
    }, 
    { 
    NAME: "Not Required", 
    EXECUTE: "Not Required", 
    TYPE: "Not Required" 
    }, 
    { 
    NAME: "Duplicate", 
    EXECUTE: "Duplicate", 
    TYPE: "Duplicate" 
    }, 
    { 
    ID: "RI04", 
    NAME: "CALCULATE FAST", 
    EXECUTE: "FF_CALC", 
    TYPE: "STORED PROCEDURE" 
    }, 
    { 
    NAME: "FORMULAS", 
    EXECUTE: "FF_CALC", 
    TYPE: "STORED PROCEDURE" 
    }, 
    { 
    ID: "RI0031", 
    NAME: "LOAD HEAD COUNT", 
    EXECUTE: "LOAD_HEADCOUNT_FACT", 
    TYPE: "STORED PROCEDURE" 
    }, 
    { 
    ID: "RI04", 
    NAME: "CALCULATE FAST", 
    EXECUTE: "FF_CALC", 
    TYPE: "STORED PROCEDURE" 
    }, 
    { 
    NAME: "FORMULAS", 
    EXECUTE: "FF_CALC", 
    TYPE: "STORED PROCEDURE" 
    }, 
    { 
    ID: "RID005", 
    NAME: "CALCULATE FAST GROUP", 
    EXECUTE: "FF_CALC", 
    TYPE: "STORED PROCEDURE" 
    }, 
    { 
    NAME: "Not Required", 
    EXECUTE: "Not Required", 
    TYPE: "Not Required" 
    }, 
    { 
    NAME: "Duplicate", 
    EXECUTE: "Duplicate", 
    TYPE: "Duplicate" 
    } 
]; 

Diese Liste enthält viele doppelte Zeilen. Ich möchte alle doppelten Zeilen daraus entfernen.

Das Objekt kann auch mehr 10 Eigenschaften haben, daher ist das Überprüfen jeder Eigenschaft nicht die Lösung. Plus, egal, wie ich online kam, sind entweder für 1-dimensionale Array oder Duplikate durch spezifische Eigenschaft zu entfernen. Wie kann ich eine Liste mit allen eindeutigen Zeilen verwalten?

+1

Was ich mir vorstellen konnte, ist der Vergleich der JSON-Version des Objekts. Wie folgt: 'JSON.stringify (obj1) === JSON.stringify (obj2)'. Das wäre schnell genug, denke ich, aber die Reihenfolge der Elementeigenschaften wäre wichtig. Ist das ein Problem? – Scalpweb

+0

Keine Bestellung ist kein Problem. Aber selbst wenn ich jede Reihe mit allen anderen vergleiche, wird der Prozess nicht zu langsam sein? Mit zunehmender Listengröße wird die Komplexität zunehmen. –

+0

Die Antwort von "Kind Benutzer" ist genau das, was ich im Sinn hatte. Der JSON.stringify-Prozess ist der schnellste Weg, um zwei Objekte in JS zu vergleichen. Ich würde sagen, Sie müssen einen Benchmark erstellen, um zu überprüfen, ob es schnell genug ist, aber es sollte in Ordnung sein. – Scalpweb

Antwort

2

Von the MDN article on JSON.stringify:

Eigenschaften von Nicht-Array-Objekten können nicht garantiert in einer bestimmten Reihenfolge angegeben werden. Verlassen Sie sich nicht auf die Anordnung von Eigenschaften innerhalb desselben Objekts innerhalb der Zeichenfolge.

Anstatt das JSON stringification von jedem Objekt direkt zu vergleichen, sollte man zuerst Object.entries verwendet ein Array von [key, value] Paaren zu erhalten, und es durch den String-Wert von key zu sortieren. Dieses Sortierte-Einträge-Array kann dann unabhängig von der JSON.stringify-Implementierung sicher beschriftet und verglichen werden.

Beachten Sie, dass mein Beispiel unten die neuesten ES6-Funktionen verwendet, einschließlich Set und Object.entries. Um diesen Code nach ES5 zu übertragen und auszuführen, besuchen Sie bitte https://babeljs.io/repl/.

function deepUnique (array) { 
 
    return [...new Set(array.map(e => JSON.stringify(Object.entries(e).sort(compareEntriesByKey))))].map(e => objectFromEntries(JSON.parse(e))) 
 
} 
 

 
function compareEntriesByKey (a, b) { 
 
    return a[0] < b[0] ? -1 : a[0] === b[0] ? 0 : 1 
 
} 
 

 
function objectFromEntries (entries) { 
 
    let result = {} 
 
    entries.forEach(e => result[e[0]] = e[1]) 
 
    return result 
 
} 
 

 
var list = [{ 
 
    ID: "2566", 
 
    NAME: "ENTERPRISE EXPENSE", 
 
    EXECUTE: "LOAD_DIMENTION", 
 
    TYPE: "PROCEDURE" 
 
    }, 
 
    { 
 
    ID: "1234", 
 
    NAME: "LOAD EXPENSE FACT", 
 
    EXECUTE: "LOAD_EXPENSE_FACT", 
 
    TYPE: "STORED PROCEDURE" 
 
    }, 
 
    { 
 
    ID: "RI0031", 
 
    NAME: "LOAD HEAD COUNT", 
 
    EXECUTE: "LOAD_HEADCOUNT_FACT", 
 
    TYPE: "STORED PROCEDURE" 
 
    }, 
 
    { 
 
    NAME: "Not Required", 
 
    EXECUTE: "Not Required", 
 
    TYPE: "Not Required" 
 
    }, 
 
    { 
 
    NAME: "Duplicate", 
 
    EXECUTE: "Duplicate", 
 
    TYPE: "Duplicate" 
 
    }, 
 
    { 
 
    ID: "RI04", 
 
    NAME: "CALCULATE FAST", 
 
    EXECUTE: "FF_CALC", 
 
    TYPE: "STORED PROCEDURE" 
 
    }, 
 
    { 
 
    NAME: "FORMULAS", 
 
    EXECUTE: "FF_CALC", 
 
    TYPE: "STORED PROCEDURE" 
 
    }, 
 
    { 
 
    ID: "RI0031", 
 
    NAME: "LOAD HEAD COUNT", 
 
    EXECUTE: "LOAD_HEADCOUNT_FACT", 
 
    TYPE: "STORED PROCEDURE" 
 
    }, 
 
    { 
 
    ID: "RI04", 
 
    NAME: "CALCULATE FAST", 
 
    EXECUTE: "FF_CALC", 
 
    TYPE: "STORED PROCEDURE" 
 
    }, 
 
    { 
 
    NAME: "FORMULAS", 
 
    EXECUTE: "FF_CALC", 
 
    TYPE: "STORED PROCEDURE" 
 
    }, 
 
    { 
 
    ID: "RID005", 
 
    NAME: "CALCULATE FAST GROUP", 
 
    EXECUTE: "FF_CALC", 
 
    TYPE: "STORED PROCEDURE" 
 
    }, 
 
    { 
 
    NAME: "Not Required", 
 
    EXECUTE: "Not Required", 
 
    TYPE: "Not Required" 
 
    }, 
 
    { 
 
    NAME: "Duplicate", 
 
    EXECUTE: "Duplicate", 
 
    TYPE: "Duplicate" 
 
    } 
 
]; 
 

 
console.log(deepUnique(list))

Credit Kind user für die Erstellung von an answer using both JSON and Set, bevor ich mein geschrieben.

+2

Danke für das Lernen, wie 'Objekt # Einträge 'funktioniert. –

2

wird diese genau Dubletten aus Ihrer Array von Objekten entfernen.

var list = [{ ID: "2566", NAME: "ENTERPRISE EXPENSE", EXECUTE: "LOAD_DIMENTION", TYPE: "PROCEDURE" }, 
 
    { ID: "1234", NAME: "LOAD EXPENSE FACT", EXECUTE: "LOAD_EXPENSE_FACT", TYPE: "STORED PROCEDURE" }, 
 
    { ID: "RI0031", NAME: "LOAD HEAD COUNT", EXECUTE: "LOAD_HEADCOUNT_FACT", TYPE: "STORED PROCEDURE" }, 
 
    {NAME: "Not Required", EXECUTE: "Not Required", TYPE: "Not Required"}, 
 
    {NAME: "Duplicate", EXECUTE: "Duplicate", TYPE: "Duplicate"}, 
 
    { ID: "RI04", NAME: "CALCULATE FAST", EXECUTE: "FF_CALC", TYPE: "STORED PROCEDURE" }, 
 
    { NAME: "FORMULAS", EXECUTE: "FF_CALC", TYPE: "STORED PROCEDURE" }, 
 
    { ID: "RI0031", NAME: "LOAD HEAD COUNT", EXECUTE: "LOAD_HEADCOUNT_FACT", TYPE: "STORED PROCEDURE" }, 
 
    { ID: "RI04", NAME: "CALCULATE FAST", EXECUTE: "FF_CALC", TYPE: "STORED PROCEDURE" }, 
 
    { NAME: "FORMULAS", EXECUTE: "FF_CALC", TYPE: "STORED PROCEDURE" }, 
 
    {ID: "RID005",NAME: "CALCULATE FAST GROUP",EXECUTE: "FF_CALC", TYPE: "STORED PROCEDURE" }, 
 
    {NAME: "Not Required", EXECUTE: "Not Required", TYPE: "Not Required"}, 
 
    {NAME: "Duplicate", EXECUTE: "Duplicate", TYPE: "Duplicate"}]; 
 
     
 
var filtered = [...new Set(list.map(v => JSON.stringify(v)))]; 
 

 
console.log(filtered.map(v => JSON.parse(v)));

+0

Ja, es funktioniert gut. Danke für die Lösung. Wenn jedoch die Reihenfolge der Objekteigenschaften geändert wird, wird das Problem verursacht. –

0

Stringifies alle Elemente, während die Überprüfung, ob ähnliche existieren und analysiert sie dann. JSON.stringify() und JSON.parse() sind jedoch nicht unglaublich schnell. Denken Sie daran, wenn Ihre Objekte ziemlich groß sind.

var list = [{ 
 
    ID: "2566", 
 
    NAME: "ENTERPRISE EXPENSE", 
 
    EXECUTE: "LOAD_DIMENTION", 
 
    TYPE: "PROCEDURE" 
 
    }, 
 
    { 
 
    ID: "1234", 
 
    NAME: "LOAD EXPENSE FACT", 
 
    EXECUTE: "LOAD_EXPENSE_FACT", 
 
    TYPE: "STORED PROCEDURE" 
 
    }, 
 
    { 
 
    ID: "RI0031", 
 
    NAME: "LOAD HEAD COUNT", 
 
    EXECUTE: "LOAD_HEADCOUNT_FACT", 
 
    TYPE: "STORED PROCEDURE" 
 
    }, 
 
    { 
 
    NAME: "Not Required", 
 
    EXECUTE: "Not Required", 
 
    TYPE: "Not Required" 
 
    }, 
 
    { 
 
    NAME: "Duplicate", 
 
    EXECUTE: "Duplicate", 
 
    TYPE: "Duplicate" 
 
    }, 
 
    { 
 
    ID: "RI04", 
 
    NAME: "CALCULATE FAST", 
 
    EXECUTE: "FF_CALC", 
 
    TYPE: "STORED PROCEDURE" 
 
    }, 
 
    { 
 
    NAME: "FORMULAS", 
 
    EXECUTE: "FF_CALC", 
 
    TYPE: "STORED PROCEDURE" 
 
    }, 
 
    { 
 
    ID: "RI0031", 
 
    NAME: "LOAD HEAD COUNT", 
 
    EXECUTE: "LOAD_HEADCOUNT_FACT", 
 
    TYPE: "STORED PROCEDURE" 
 
    }, 
 
    { 
 
    ID: "RI04", 
 
    NAME: "CALCULATE FAST", 
 
    EXECUTE: "FF_CALC", 
 
    TYPE: "STORED PROCEDURE" 
 
    }, 
 
    { 
 
    NAME: "FORMULAS", 
 
    EXECUTE: "FF_CALC", 
 
    TYPE: "STORED PROCEDURE" 
 
    }, 
 
    { 
 
    ID: "RID005", 
 
    NAME: "CALCULATE FAST GROUP", 
 
    EXECUTE: "FF_CALC", 
 
    TYPE: "STORED PROCEDURE" 
 
    }, 
 
    { 
 
    NAME: "Not Required", 
 
    EXECUTE: "Not Required", 
 
    TYPE: "Not Required" 
 
    }, 
 
    { 
 
    NAME: "Duplicate", 
 
    EXECUTE: "Duplicate", 
 
    TYPE: "Duplicate" 
 
    } 
 
]; 
 

 
function removeDuplicates(list) { 
 
    return list.reduce(function(memo, obj) { 
 
    var string = JSON.stringify(obj); 
 

 
    if (memo.indexOf(string) === -1) { 
 
     memo.push(string); 
 
    } 
 

 
    return memo; 
 
    }, []).map(function(stringified) { 
 
    return JSON.parse(stringified); 
 
    }); 
 
} 
 

 
list = removeDuplicates(list); 
 
console.log(list);

0

Der folgende Ausschnitt wird die Duplikate durch Konstruieren eines Hash-Map entfernen mit JSON Schlüsseln und die entsprechenden Objektpositionen als Werte Zeichenfolge. Indem wir die Werte nicht stringieren, behalten wir ihre Referenzen bei. Daher wird hier keine Operation JSON.parse() verwendet.

function removeDupes(a){ 
 
    var hash = a.reduce(function(h,o){ 
 
         var os = JSON.stringify(o); 
 
         return h[os] ? h : (h[os] = o, h); 
 
    },{}); 
 
    return Object.keys(hash) 
 
       .map(k => hash[k]); 
 
} 
 

 
var list = [{  ID: "2566", 
 
       NAME: "ENTERPRISE EXPENSE", 
 
      EXECUTE: "LOAD_DIMENTION", 
 
       TYPE: "PROCEDURE" 
 
      }, 
 
      {  ID: "1234", 
 
       NAME: "LOAD EXPENSE FACT", 
 
      EXECUTE: "LOAD_EXPENSE_FACT", 
 
       TYPE: "STORED PROCEDURE" 
 
      }, 
 
      { 
 
        ID: "RI0031", 
 
       NAME: "LOAD HEAD COUNT", 
 
      EXECUTE: "LOAD_HEADCOUNT_FACT", 
 
       TYPE: "STORED PROCEDURE" 
 
      }, 
 
      { 
 
       NAME: "Not Required", 
 
      EXECUTE: "Not Required", 
 
       TYPE: "Not Required" 
 
      }, 
 
      { 
 
       NAME: "Duplicate", 
 
      EXECUTE: "Duplicate", 
 
       TYPE: "Duplicate" 
 
      }, 
 
      { 
 
        ID: "RI04", 
 
       NAME: "CALCULATE FAST", 
 
      EXECUTE: "FF_CALC", 
 
       TYPE: "STORED PROCEDURE" 
 
      }, 
 
      { 
 
       NAME: "FORMULAS", 
 
      EXECUTE: "FF_CALC", 
 
       TYPE: "STORED PROCEDURE" 
 
      }, 
 
      { 
 
        ID: "RI0031", 
 
       NAME: "LOAD HEAD COUNT", 
 
      EXECUTE: "LOAD_HEADCOUNT_FACT", 
 
       TYPE: "STORED PROCEDURE" 
 
      }, 
 
      { 
 
        ID: "RI04", 
 
       NAME: "CALCULATE FAST", 
 
      EXECUTE: "FF_CALC", 
 
       TYPE: "STORED PROCEDURE" 
 
      }, 
 
      { 
 
       NAME: "FORMULAS", 
 
      EXECUTE: "FF_CALC", 
 
       TYPE: "STORED PROCEDURE" 
 
      }, 
 
      { 
 
        ID: "RID005", 
 
       NAME: "CALCULATE FAST GROUP", 
 
      EXECUTE: "FF_CALC", 
 
       TYPE: "STORED PROCEDURE" 
 
      }, 
 
      { 
 
       NAME: "Not Required", 
 
      EXECUTE: "Not Required", 
 
       TYPE: "Not Required" 
 
      }, 
 
      { 
 
       NAME: "Duplicate", 
 
      EXECUTE: "Duplicate", 
 
       TYPE: "Duplicate" 
 
      } 
 
      ], 
 
    res = removeDupes(list); 
 
console.log(res);

Allerdings, wenn Sie alle Vorkommen eines duplizierten Artikel entfernen möchten, dann können Sie noch tun, um die Arbeit in sehr ähnlicher Weise wie;

function removeDupes(a){ 
 
    var hash = a.reduce(function(h,o){ 
 
         var os = JSON.stringify(o); 
 
         return h[os] ? (h[os] = false,h) : (h[os] = o, h); 
 
         },{}); 
 
    return Object.keys(hash) 
 
       .reduce((r,k) => hash[k] === false ? r : r.concat(hash[k]),[]); 
 
} 
 

 
var list = [{  ID: "2566", 
 
       NAME: "ENTERPRISE EXPENSE", 
 
      EXECUTE: "LOAD_DIMENTION", 
 
       TYPE: "PROCEDURE" 
 
      }, 
 
      {  ID: "1234", 
 
       NAME: "LOAD EXPENSE FACT", 
 
      EXECUTE: "LOAD_EXPENSE_FACT", 
 
       TYPE: "STORED PROCEDURE" 
 
      }, 
 
      { 
 
        ID: "RI0031", 
 
       NAME: "LOAD HEAD COUNT", 
 
      EXECUTE: "LOAD_HEADCOUNT_FACT", 
 
       TYPE: "STORED PROCEDURE" 
 
      }, 
 
      { 
 
       NAME: "Not Required", 
 
      EXECUTE: "Not Required", 
 
       TYPE: "Not Required" 
 
      }, 
 
      { 
 
       NAME: "Duplicate", 
 
      EXECUTE: "Duplicate", 
 
       TYPE: "Duplicate" 
 
      }, 
 
      { 
 
        ID: "RI04", 
 
       NAME: "CALCULATE FAST", 
 
      EXECUTE: "FF_CALC", 
 
       TYPE: "STORED PROCEDURE" 
 
      }, 
 
      { 
 
       NAME: "FORMULAS", 
 
      EXECUTE: "FF_CALC", 
 
       TYPE: "STORED PROCEDURE" 
 
      }, 
 
      { 
 
        ID: "RI0031", 
 
       NAME: "LOAD HEAD COUNT", 
 
      EXECUTE: "LOAD_HEADCOUNT_FACT", 
 
       TYPE: "STORED PROCEDURE" 
 
      }, 
 
      { 
 
        ID: "RI04", 
 
       NAME: "CALCULATE FAST", 
 
      EXECUTE: "FF_CALC", 
 
       TYPE: "STORED PROCEDURE" 
 
      }, 
 
      { 
 
       NAME: "FORMULAS", 
 
      EXECUTE: "FF_CALC", 
 
       TYPE: "STORED PROCEDURE" 
 
      }, 
 
      { 
 
        ID: "RID005", 
 
       NAME: "CALCULATE FAST GROUP", 
 
      EXECUTE: "FF_CALC", 
 
       TYPE: "STORED PROCEDURE" 
 
      }, 
 
      { 
 
       NAME: "Not Required", 
 
      EXECUTE: "Not Required", 
 
       TYPE: "Not Required" 
 
      }, 
 
      { 
 
       NAME: "Duplicate", 
 
      EXECUTE: "Duplicate", 
 
       TYPE: "Duplicate" 
 
      } 
 
      ], 
 
    res = removeDupes(list); 
 
console.log(res);

+0

Ich weiß, dass die Wahrscheinlichkeit einer Kollision mit "zähle diesen" nicht niedrig ist, aber bitte, das ist ein perfektes Beispiel, wenn es darum geht, die einzigartige Identität von Objekten zu nutzen. 'var IGNORE = {}'. . . 'if (hash [k] === IGNORE) {...}' – gyre

+0

@gyre Ja sicher, dass du Recht hast, aber es war nur ein Kommentar - ein Stück Code, das nicht für die Produktion gedacht war. – Redu

+0

Ich verstehe Ihren Standpunkt, aber Sie würden überrascht sein, wie viel Code von SO es auf die eine oder andere Weise in * jemandes * Produktion schafft ... – gyre

0

Sie könnten eine Hash-Tabelle verwenden nur mit den sortierten Schlüsseln als Hash und ein Array für die Objekte mit dem gleichen Schlüssel.

{ 
    "EXECUTE|ID|NAME|TYPE": [ 
     { ID: "2566", NAME: "ENTERPRISE EXPENSE", EXECUTE: "LOAD_DIMENTION", TYPE: "PROCEDURE" }, 
     { ID: "1234", /* ... */ }, 
     { ID: "RI0031", /* ... */ }, 
     { ID: "RI04", /* ... */ }, 
     { ID: "RID005", /* ... */ } 
    ], 
    "EXECUTE|NAME|TYPE": [ 
     { NAME: "Not Required", EXECUTE: "Not Required", TYPE: "Not Required" }, 
     { NAME: "Duplicate", EXECUTE: "Duplicate", TYPE: "Duplicate" }, 
     { NAME: "FORMULAS", EXECUTE: "FF_CALC", TYPE: "STORED PROCEDURE" } 
    ] 
} 

Zur Filterung, könnte man zuerst die Schlüssel überprüfen, verbunden mit dem Rohr, in der Hash-Tabelle und dann, wenn gefunden wird, iteriert das Array der Hash-Tabelle und prüft alle Eigenschaften. Wenn nicht gleich, dann schieben Sie das tatsächliche Objekt in die Hash-Tabelle und geben Sie true zurück.

var list = [{ ID: "2566", NAME: "ENTERPRISE EXPENSE", EXECUTE: "LOAD_DIMENTION", TYPE: "PROCEDURE" }, { ID: "1234", NAME: "LOAD EXPENSE FACT", EXECUTE: "LOAD_EXPENSE_FACT", TYPE: "STORED PROCEDURE" }, { ID: "RI0031", NAME: "LOAD HEAD COUNT", EXECUTE: "LOAD_HEADCOUNT_FACT", TYPE: "STORED PROCEDURE" }, { NAME: "Not Required", EXECUTE: "Not Required", TYPE: "Not Required" }, { NAME: "Duplicate", EXECUTE: "Duplicate", TYPE: "Duplicate" }, { ID: "RI04", NAME: "CALCULATE FAST", EXECUTE: "FF_CALC", TYPE: "STORED PROCEDURE" }, { NAME: "FORMULAS", EXECUTE: "FF_CALC", TYPE: "STORED PROCEDURE" }, { ID: "RI0031", NAME: "LOAD HEAD COUNT", EXECUTE: "LOAD_HEADCOUNT_FACT", TYPE: "STORED PROCEDURE" }, { ID: "RI04", NAME: "CALCULATE FAST", EXECUTE: "FF_CALC", TYPE: "STORED PROCEDURE" }, { NAME: "FORMULAS", EXECUTE: "FF_CALC", TYPE: "STORED PROCEDURE" }, { ID: "RID005", NAME: "CALCULATE FAST GROUP", EXECUTE: "FF_CALC", TYPE: "STORED PROCEDURE" }, { NAME: "Not Required", EXECUTE: "Not Required", TYPE: "Not Required" }, { NAME: "Duplicate", EXECUTE: "Duplicate", TYPE: "Duplicate" }], 
 
    result = list.filter(function (hash) { 
 
     return function (o) { 
 
      var keys = Object.keys(o).sort(), 
 
       key = keys.join('|'); 
 

 
      if (!hash[key]) { 
 
       hash[key] = [o]; 
 
       return true; 
 
      } 
 
      if (!hash[key].some(function (p) { return keys.every(function (k) { return o[k] === p[k]; }); })) { 
 
       hash[key].push(o); 
 
       return true; 
 
      } 
 
     }; 
 
    }(Object.create(null))); 
 

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

ES6 mit Map

var list = [{ ID: "2566", NAME: "ENTERPRISE EXPENSE", EXECUTE: "LOAD_DIMENTION", TYPE: "PROCEDURE" }, { ID: "1234", NAME: "LOAD EXPENSE FACT", EXECUTE: "LOAD_EXPENSE_FACT", TYPE: "STORED PROCEDURE" }, { ID: "RI0031", NAME: "LOAD HEAD COUNT", EXECUTE: "LOAD_HEADCOUNT_FACT", TYPE: "STORED PROCEDURE" }, { NAME: "Not Required", EXECUTE: "Not Required", TYPE: "Not Required" }, { NAME: "Duplicate", EXECUTE: "Duplicate", TYPE: "Duplicate" }, { ID: "RI04", NAME: "CALCULATE FAST", EXECUTE: "FF_CALC", TYPE: "STORED PROCEDURE" }, { NAME: "FORMULAS", EXECUTE: "FF_CALC", TYPE: "STORED PROCEDURE" }, { ID: "RI0031", NAME: "LOAD HEAD COUNT", EXECUTE: "LOAD_HEADCOUNT_FACT", TYPE: "STORED PROCEDURE" }, { ID: "RI04", NAME: "CALCULATE FAST", EXECUTE: "FF_CALC", TYPE: "STORED PROCEDURE" }, { NAME: "FORMULAS", EXECUTE: "FF_CALC", TYPE: "STORED PROCEDURE" }, { ID: "RID005", NAME: "CALCULATE FAST GROUP", EXECUTE: "FF_CALC", TYPE: "STORED PROCEDURE" }, { NAME: "Not Required", EXECUTE: "Not Required", TYPE: "Not Required" }, { NAME: "Duplicate", EXECUTE: "Duplicate", TYPE: "Duplicate" }], 
 
    result = list.filter((map => o => { 
 
     var keys = Object.keys(o).sort(), 
 
      key = keys.join('|'); 
 

 
     if (!map.has(key)) { 
 
      map.set(key, [o]); 
 
      return true; 
 
     } 
 
     if (!map.get(key).some(p => keys.every(k => o[k] === p[k]))) { 
 
      map.get(key).push(o); 
 
      return true; 
 
     } 
 
    })(new Map)); 
 

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

Verwandte Themen