2016-06-08 13 views
0

Ich weiß nicht, was mit meinem Code falsch ist. Kannst du mir bitte helfen? Diese Funktion wird Wörter mit Array übersetzen. Die vollständigen taks ist:js array assoziativ: indexOf ist keine Funktion

Stellen ein kleines zweisprachiges Lexikon als Javascript-Objekt in der Mode folgende { „fröhlich“: „Gott“, „Weihnachten“: „Juli“, „und“: „och“ , "glücklich": gott“, "neu": "nytt", "Jahr": "Lr"} und verwenden sie es Ihre Weihnachtskarten aus dem englischen ins schwedische zu übersetzen

function translateText(){ 
 
var translate=[], i= 0,text, word, text2=''; 
 
    translate = {"merry":"god", "christmas":"jul", "and":"och", "happy":"gott", "new":"nytt", "year":"ĺr"}; 
 

 
    text = document.getElementById('text').value; 
 
    word = text.split(" "); 
 

 

 
    for (i;i<word.length; i++){ 
 

 
     if (translate.indexOf(word)!==-1) { 
 

 
      text2 += translate[word] + " "; 
 

 
     }else{ 
 
      text2 += word + " "; 
 

 
     } 
 
    } 
 

 
     document.getElementById('boxEight').innerHTML = text2; 
 
}
.

+0

deklarieren Sie zunächst 'translate' als ein leeres Array, dann überschreiben Sie es mit einem [Objekt] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ Objekt), das 'indexOf' nicht unterstützt. Sie können einfach 'if (translate [word])' – Hamms

Antwort

1

Es funktioniert nicht weil Sie ein Objekt nicht ein Array verwenden, obwohl Objekte ähnlich wie ein Array verwendet werden können.

Um zu überprüfen, ob ein Objekt einen Wert enthält, Sie hasOwnProperty verwenden können:

if (translate.hasOwnProperty(word)) { 
    ... 
} 

in:

if (word in translate) { 
    ... 
} 

Oder einfach nur einen guten altmodischen Zugang, wenn Sie darüber eine sorgende "truthy" -Wert (nicht 0, false, null, undefined, NaN oder leere Zeichenfolge).

if (translate[word]) { 
    ... 
} 
-1

Sie machen ein Objekt übersetzen, kein Array, so zuerst:

translate = [{"merry":"god"}, {"christmas":"jul"}, {"and":"och"}, {"happy":"gott"}, {"new":"nytt"}, {"year":"ĺr"}]; 

nächsten, IndexOf ein Verfahren ist, den Index eines Wort oder Zeichen in einer Zeichenfolge für das Erhalten Reference

0

Ich bin nicht sicher, aber ich denke, es könnte die Tatsache sein, dass Sie Ihre übersetzt Array in ein Objekt mit der folgenden Zeile umgewandelt:

translate = {"merry":"god", "christmas":"jul", "and":"och", "happy":"gott", "new":"nytt", "year":"ĺr"}; 

Versuchen Sie, geschweiften Klammern {} zum Quadrat Klammern []

+0

verwenden. Das Ändern der geschweiften Klammern in eckige Klammern würde zu ungültigem JavaScript führen. –

+0

Das ist richtig Mike, vergaß, dass assoziative Arrays in JavaScript als Objekte verwendet werden – rolivares93

+0

Ändern von {} zu [] funktioniert nicht wie Mike C kommentierte vor wenigen Minuten – Aketo