2017-01-06 4 views
-2

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]]; 
+0

Mögliches Duplikat von [Wie Arrays in JavaScript vergleichen?] (Http://stackoverflow.com/questions/7837456/how-to-compare-arrays-in-javascript) –

+0

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

+0

Leute, diese Links, die du gepostet hast, haben keine Lösung für mein Problem. – kindguy123

Antwort

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)

0

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);

+0

Nicht die gleiche Reihenfolge, nach der das OP gefragt hat ... kann nicht sagen, ob das wichtig ist oder nicht – musefan

2

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>

3

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; }

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);