Bei einem Array von Arrays, was wäre die effiziente Möglichkeit, das doppelte Objekt zu identifizieren?Doppelte Array innerhalb Array finden
var array = [
[
11.31866455078125,
44.53836644772605
],
[ // <-- Here's the duplicate
11.31866455078125,
44.53836644772605
],
[
11.371536254882812,
44.53836644772605
],
[
11.371536254882812,
44.50140292110874
]
]
Ich habe mit lodash
als akzeptierte Abhängigkeit von dieser Arbeit, und ich bekommen, wie einfach zurück, um die „einzigartige“ -Liste mit _.uniqWith
und _.isEqual
:
_.uniqWith(array,_.isEqual)
Mit geben würde, die " einzigartig“-Version der Liste:
[
[ 11.31866455078125, 44.53836644772605 ],
[ 11.371536254882812, 44.53836644772605 ],
[ 11.371536254882812, 44.50140292110874 ]
]
Aber nicht nur die einzigartigen Elemente Berichterstattung, ich brauche das Element nur die dupliziert wird, und im Idealfall t Der Index des ersten Auftretens.
Ist dies tatsächlich in der lodash
Bibliothek durch eine Kombination von Methoden, die ich vermisse? Oder muss ich einfach mit Schreibschleifen leben, um Elemente zu vergleichen.
Wahrscheinlich nur übermüdet, also wären neue Augen auf das Problem willkommen.
Der Versuch, nicht Funktionen neu zu schreiben, wenn es Bibliothek Methoden, die Klage, so dass ich im Grunde stecken mit:
nur das Duplikat Rückgabe oder zumindest die Vergleichsdifferenz mit der „eindeutige Liste“.
Grundsätzlich identifiziert der "Index von" ein Array innerhalb eines Arrays. Obwohl ich denke, dass eine Filterreduktion mit
_.isEqual
sein kann, sobald das doppelte Element identifiziert wird.
auch versuchen, ein Objekt Hash/Karte zu vermeiden, Erstellen und Zählen das Vorkommens von Schlüsseln auch hier, oder zumindest nicht als separates Objekt, und als etwas, das funktionell „in-line“ durchgeführt werden kann.
Auf weiteren Blick fand ich meinen Tippfehler und sah mir den Code genau an und verstand, was Sie hier machen. Ich kann nicht sagen, dass ich überglücklich bin, '.slice()' zu verwenden, um eine Liste weiter zu entwickeln, aber es fühlt sich sauberer an als nur indexierte Loops. Mummling es über. –
@NeilLunn '_.findIndex (collection.slice (0, index), gleich)! == -1;' kann auf ein manuelles 'findIndex' reduziert werden, um nur einmal zu iterieren. Aber der derzeitige Ansatz ist kompakt. –
Art von wo ich dachte. Du hast meine Stimme trotzdem bekommen. Ich räume nur noch den Kopf und erwäge Optionen. Wie ich schon sagte, es ist ein sauberer codierter Ansatz als andere. –