2016-08-18 7 views
0

So habe ich ein interessantes Problem mit String.split() in Google Chrome in einem aktuellen, schnellen Javascript-Algorithmus. Ich habe es mit einem ziemlich großen Objekt zu tun, bei dem ich jeden Schlüssel des Objekts betrachten, nach Qualitäten prüfen und dann den Namen des Schlüsselstrings bearbeiten soll, wenn er übereinstimmt (Versuch, für jedes Wort im Namen zu erhöhen).Javascript String.Split() Methode geben Strings

Der folgende Code berücksichtigt den Fehler und geht von der Existenz von cardData aus (eine in einem separaten Skript in HTML deklarierte Variable, die var cardData = (riesiges Objekt hier) entspricht, insbesondere das Objekt in AllCards.json, das sich bei mtgjson befindet .com.

Wenn ich den Namen console.log (oder typeof Name), so scheint es, einen durch Kommata abgegrenzte Zeichenfolge zurückkommen, und nicht einen tatsächlichen Javascript-Array. Dieser Fehler mit einem Datensatz in einer anderen Registerkarte nicht reproduzieren von nur 3 mit dem gleichen Algorithmus.Ich bin gespannt, ob jemand anderes dieses Problem bis jetzt gesehen hat, sonst hat ein Einblick, dass ich in diesem Fall möglicherweise fehlen würde.Nur

Beispiel Eingabe und Code:

var cardData = { 
 
    "Shivan Dragon": { 
 
     "types": ["Creature"] 
 
    }, 
 
    "Mimeoplasm": { 
 
     "types": ["Creature"] 
 
    }, 
 
    "This Is A Card Name": { 
 
     "types": ["Creature"] 
 
    } 
 
}; 
 

 
var totalNameLength = 0; 
 

 
var alreadyCheckedNames = {}; 
 

 
for (var key in cardData){ 
 
    if ((cardData[key]["types"] && cardData[key]["types"].indexOf("Creature") === -1) || (cardData[key]["supertypes"] && cardData[key]["supertypes"].indexOf("Legendary") !== -1)){ 
 
     delete cardData[key]; 
 
    } 
 
    else { 
 

 
    if (!alreadyCheckedNames[key]){ 
 

 
     var name = String.prototype.split.call(key, " "); 
 

 
     totalNameLength++; 
 
     alreadyCheckedNames[key] = cardData[key]; 
 

 
     for (var i = 0; i < name.length; i++){ 
 
     if (name[i] === ","){ 
 
      totalNameLength++; 
 
     } 
 
     } 
 

 
    console.log(name); 
 
    } 
 
    } 
 
} 
 

 
console.log(totalNameLength);

Beispielkonsolenausgabe:

 
Shivan,Dragon 
Mimeoplasm 
This,Is,A,Card,Name 
8 
+1

Warum rufen Sie 'String.prototype.split' anstatt nur den Schlüssel zu teilen? (Wenn dies in einer Funktion gewesen wäre, wie es angebracht ist, sieht es so aus, als ob es funktionieren sollte.) –

+0

Es war eine vorübergehende Änderung, um zu überprüfen, ob es korrekt aufgeteilt wurde. Immer noch funktional, aber es war tatsächlich ein Problem mit window.name, das den Raum verschmutzte. –

Antwort

0

Ich glaube, ich fand das Problem ... Das funktioniert nicht:

for (var key in cardData){ 
    var name = key.split(" "); 
    console.log(name); 
} 

Aber das tut:

for (var key in cardData){ 
    var card_name = key.split(" "); 
    console.log(card_name); 
} 

:)

+0

Ah ja, verdammt window.name gibt mir Kummer. Danke für die Erinnerung! –

Verwandte Themen