2016-04-28 19 views
1

ich lodash mit und ich habe ein Array:Array Werte, die mehr als einmal

const arr = ['firstname', 'lastname', 'initials', 'initials']; 

ich ein neues Array wollen nur die Werte enthalten, die mehr als einmal (die doppelten Werte) erscheinen.

Es scheint, als wäre dies etwas, für das lodash eine spezifische Methode haben könnte, aber ich kann keine sehen. Etwas wie: const dups = _.duplicates(arr); wäre nett.

// object with array values and number of occurrences 
const counts = _.countBy(arr, value => value); 

// reduce object to only those with more than 1 occurrence 
const dups = _.pickBy(counts, value => (value > 1)); 

// just the keys 
const keys = _.keys(dups); 

console.log(keys); // ['initials'] 

Gibt es einen besseren Weg, als diese ..:

ich habe?

+0

Sie verketten kann es weniger ausführlich viel zu machen, und Sie die Callback-Funktion in '_.countBy nicht benötigen()', ** [siehe dieses Beispiel] (https://jsfiddle.net/gq1o3Lk9/) **. Wenn Sie die ** [_. Filter solution] (http://stackoverflow.com/questions/31681732/lodash-get-duplicate-values-from-an-array) ** auswählen, kann diese Frage ebenfalls berücksichtigt werden ein Duplikat. – ryeballar

Antwort

1

können Sie diese

let dups = _.filter(array, (val, i, it) => _.includes(it, val, i + 1)); 

Wenn Sie nur einzigartige Duplikate in Ihrem dups Array wollen verwenden, können Sie _.uniq() auf sie aus.

3

Es ist nicht notwendig lodash für diese Aufgabe zu verwenden, können Sie es leicht erreichen Ebene mit Hilfe von JavaScript mit Array.prototype.reduce() und Array.prototype.indexOf():

var arr = ['firstname', 'lastname', 'initials', 'initials', 'a', 'c', 'a', 'a', 'c']; 

var dupl = arr.reduce(function(list, item, index, array) { 
    if (array.indexOf(item, index + 1) !== -1 && list.indexOf(item) === -1) { 
    list.push(item); 
    } 
    return list; 
}, []); 

console.log(dupl); // prints ["initials", "a", "c"] 

die Arbeits demo prüfen.


Oder etwas einfacher mit lodash:

var arr = ['firstname', 'lastname', 'initials', 'initials', 'a', 'c', 'a', 'a', 'c']; 

var dupl = _.uniq(_.reject(arr, function(item, index, array) { 
    return _.indexOf(array, item, index + 1) === -1; 
})); 

console.log(dupl); // prints ["initials", "a", "c"] 
Verwandte Themen