2017-01-04 1 views
1

Ich habe ein großes String-Array von ~ 6k String-Elemente. Ich weiß Sets arbeiten in meinem Browser und sind in Ordnung, wenn Sie auf kleineren Arrays testen. Wenn ich versuche, das große Array in ein neues Set zu konvertieren, wird nur ein leeres zurückgegeben.Javascript Set nicht von großen String Array Array

Mein Array ist ursprünglich Teil eines verschachtelten, obwohl mehrere Methoden der Eingabe in das Set ausprobiert wurden. Einige davon sind:

var input = Bigger_array[1]; 

var input = [...Bigger_array[1]]; 

var dummy = Bigger_array[1]; 
var input = [...dummy]; 

Zusätzlich verschiedene Methoden des Satzes zu schaffen haben auch versucht worden:

var s = new Set(input); 

var s = new Set(); 
for (var j = 0; j < input.length; j++) { 
    s.add(input[i]); 
} 

alles ohne Erfolg:

set {} 

Wie verlangt eine Arbeits Geige für kleinere Arrays:

Bigger_array=[['a','b','c'],['a','b','c']] 
 

 

 
var input = [...Bigger_array[1]]; 
 
var s = new Set(); 
 
for (var j = 0; j < input.length; j++) { 
 
    s.add(input[j]); 
 
} 
 
console.log(s); 
 

 

 
///the original method 
 
var input =Bigger_array[1] 
 
var s = new Set(input); 
 
console.log(s); 
 

 
alert('viewing s in console presents correct values of set \n fiddle is being weird') 
 
//etc...

+0

Der Spread-Operator schlägt fehl, wenn Sie ein Array mit sehr großen Größen haben, abhängig von Ihrer aktuellen Sitzung. Verwenden Sie keine Spreads mit Arrays größer als 150K Länge. In Ihrem zweiten Snippet sollten Sie sagen: 's.add (input [j]);' though. – Redu

+0

können Sie eine Geige zeigen, die Ihr Problem zeigt? Wurde der gleiche Code mit kleineren Arrays getestet? – andyroschy

+0

@Redu danke für die Köpfe hoch. Ich benutzte das nur in der Hoffnung, dass es etwas mit der Referenzierung des Arrays zu tun haben könnte (und somit ein neues erstellen würde). – user2589273

Antwort

1

Offensichtlich einige JS Motoren nicht zu console.log() das Set oder das Map Objekt richtig und stattdessen erhalten Sie nur ein leer aussehendes Objekt wie {}. Lass dich nicht täuschen. Ich glaube, es geht um die toString() Methode des Set-Konstruktors. Weitere Informationen sind here.

1

Konsole kann Tricks auf Sie spielen. Es hat seine eigenen Methoden zur Darstellung von Daten, die sich von der JavaScript-Methode toString unterscheiden. Es kann Daten abschneiden oder gar nicht anzeigen. Andere Male verzögert es die Ausgabe, die auch irreführende Ausgabe verursachen kann.

Um zu bestätigen, dass Ihr set gerade fein ist, Ausgabe seiner Größe:

console.log(s.size); 

Oder man kann es nur auf ein Array umwandeln zurück:

console.log([...s]); 
Verwandte Themen