Finden. nicht einmalig Werte aus 3 Arrays (oder mehr):
ES2015
//
var arr = [1,2,2,3,3,4,5,6,2,3,7,8,5,22],
arr2 = [1,2,511,12,50],
arr3 = [22,0],
merged,
nonUnique;
// Combine all the arrays to a single one
merged = arr.concat(arr2, arr3)
// create a new (dirty) Array with only the non-unique items
nonUnique = merged.filter((item,i) => merged.includes(item, i+1))
// Cleanup - remove duplicate & empty items items
nonUnique = [...new Set(nonUnique)]
console.log(nonUnique)
PRE-ES2015:
In dem folgenden Beispiel habe ich eine überlagerte unique
Methode über der Array
Prototyp und ermöglicht den Zugang von überall her und hat mehr "deklarativ" Syntax. Ich empfehle diesen Ansatz bei großen Projekten nicht, da es sehr wohl zu Kollisionen mit einer anderen Methode mit demselben benutzerdefinierten Namen kommen kann.
Array.prototype.unique = function () {
var arr = this.sort(), i=arr.length; // input must be sorted for this to work
while(i--)
arr[i] === arr[i-1] && arr.splice(i,1) // remove duplicate item
return arr
}
Array.prototype.nonunique = function () {
var arr = this.sort(), i=arr.length, res = []; // input must be sorted for this to work
while(i--)
arr[i] === arr[i-1] && (res.indexOf(arr[i]) == -1) && res.push(arr[i])
return res
}
//
var arr = [1,2,2,3,3,4,5,6,2,3,7,8,5,22],
arr2 = [1,2,511,12,50],
arr3 = [22,0],
// merge all arrays & call custom Array Prototype - "unique"
unique = arr.concat(arr2, arr3).unique(),
nonunique = arr.concat(arr2, arr3).nonunique()
console.log(unique) // [1,12,2,22,3,4,5,50,511,6,7,8]
console.log(nonunique) // [1,12,2,22,3,4,5,50,511,6,7,8]
29 Stimmen
Es scheint jahrelang Verwirrung darüber zu herrschen, was diese Frage bedeutet. Ich musste wissen, welche Elemente in dem Array doppelt vorhanden waren: "Ich muss nur herausfinden, welche Werte doppelt vorhanden sind". Die richtige Antwort sollte NICHT die Duplikate aus dem Array entfernen. Das ist genau das Gegenteil von dem, was ich wollte: eine Liste der Duplikate, nicht eine Liste der eindeutigen Elemente.
0 Stimmen
github.com/lodash/lodash/issues/4852#issuecomment-666366511 Ich würde dies als Antwort hinzufügen, aber angesichts der Länge der Antworten würde es nie gesehen werden