Ich habe ein Array:Filter Array von duplizierten Arrays
var arr = [[1,7],[2,6],[3,5],[4,4],[5,3],[6,2],[7,1]];
Alles, was ich will, ist sie von doppelten Arrays zu filtern. So wird es wie folgt aussehen:
var arr = [[1,7],[2,6],[3,5],[4,4]];
Ich habe ein Array:Filter Array von duplizierten Arrays
var arr = [[1,7],[2,6],[3,5],[4,4],[5,3],[6,2],[7,1]];
Alles, was ich will, ist sie von doppelten Arrays zu filtern. So wird es wie folgt aussehen:
var arr = [[1,7],[2,6],[3,5],[4,4]];
Sie können dies tun, mit filter()
, some()
und every()
.
var arr = [[1,7],[2,6],[3,5],[4,4],[5,3],[6,2],[7,1]];
var result = arr.filter(function(e) {
var r = this.some(function(a) {
return e.every(function(b) {
return a.includes(b)
})
})
if (!r) {
this.push(e);
return e
}
}, [])
console.log(result)
Wenn Sie möchten, dass Sie den Pfeil-Funktionen nutzen es auch so schreiben kann.
var arr = [[1,7],[2,6],[3,5],[4,4],[5,3],[6,2],[7,1]];
var result = arr.filter(function(e) {
return !this.some(a =>e.every(b =>a.includes(b))) ? this.push(e) && e : false
}, [])
console.log(result)
der Lösung unter Verwendung
Array.prototype.map()
, Array.prototype.filter()
, Array.prototype.join()
, String.prototype.split()
Funktionen:
var arr = [[1,7],[2,6],[3,5],[4,4],[5,3],[6,2],[7,1]];
result = arr.map(function (a) {
a.sort();
return a.join();
}).filter(function (inner_arr, idx, a) {
return idx === a.lastIndexOf(inner_arr);
}).map(function(s){
return s.split(',');
});
console.log(result);
Nicht die gleiche Reihenfolge, nach der das OP gefragt hat ... kann nicht sagen, ob das wichtig ist oder nicht – musefan
Hier Lösung:
Zunächst einmal sollten Sie arrays
sortieren aussehen: [[1,7],[2,6],[3,5],[4,4],[3,5],[2,6],[1,7]]
und dann duplicates
beseitigen.
Verwenden Sie filter
Funktion zum Filtern der Werte aus Array. seen
es ist ein Wörterbuch und ich verwende es für überprüfen, ob der aktuelle Wert in ihm gefunden wurde (gesehen Wörterbuch). Wenn ja, "entfernen" Wert aus Array. Ist dies nicht der Fall, legen Sie fest, dass das aktuelle Array verwendet wurde, und wechseln Sie zum nächsten Element. Ich sagte "Entfernen", weil filter
Funktion ein neues Array erstellt.
filter
Funktion ist einfach zu verstehen. Erfahren Sie mehr darüber, here
var arr = [[1,7],[2,6],[3,5],[4,4],[5,3],[6,2],[7,1]];
arr.forEach(function(array){
array.sort((a,b)=>a>b);
});
var seen = {};
var uniqueArray = arr.filter(function(item) {
return seen.hasOwnProperty(item) ? false : (seen[item] = true);
});
console.log(uniqueArray);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Sie könnten eine Hash-Tabelle verwenden und die verbundene Reihe von sortierten Array als Hash.
var arr = [[1, 7], [2, 6], [3, 5], [4, 4], [5, 3], [6, 2], [7, 1]],
result = arr.filter(function(a) {
var hash = a.slice().sort(function (a, b) { return a - b; }).join();
if (!this[hash]) {
this[hash] = true;
return true;
}
}, Object.create(null));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
ES6 mit Set
var asc = (a, b) => a - b,
join = a => a.slice().sort(asc).join(),
arr = [[1, 7], [2, 6], [3, 5], [4, 4], [5, 3], [6, 2], [7, 1]],
result = arr.filter((hash => a => (h => !hash.has(h) && hash.add(h))(join(a)))(new Set));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
ich sehen kann, werden alle Lösungen halten ursprüngliche Array intakt. Wenn das kein Problem, hier ist ein mehr Fleisch & Kartoffeln ™, einfache Lösung:
var arr = [[1,7],[2,6],[3,5],[4,4],[5,3],[6,2],[7,1]];
temp=[];
unique=[];
for(i=0;i<arr.length;i++) {
str=arr[i].sort().toString();
if(temp.indexOf(str)===-1) {
temp.push(str);
unique.push(arr[i]);
}
}
console.log(unique);
Mögliches Duplikat von [Wie Arrays in JavaScript vergleichen?] (Http://stackoverflow.com/questions/7837456/how-to-compare-arrays-in-javascript) –
Mögliches Duplikat von [Dubletten aus einem Array von Objekten in Javascript entfernen] (http://stackoverflow.com/questions/2218999/remove-duplicates-from -an-array-of-objects-in-javascript) – Alec
Leute, diese Links, die du gepostet hast, haben keine Lösung für mein Problem. – kindguy123