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
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.) –
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. –