2017-12-06 34 views
0

Ich mache eine Chrome-App, die erweiterte Object.keys() benötigt, die ich nirgends finden kann. Hier ist ein Teil meines Codes.Erweiterte JavaScript-Objektschlüssel

Dictionary = { 
    C: { 
    "calculation": {"definitions":["a process or result of calculating 
    something.", "careful thought and planning that is done usually for 
    selfish reasons.]} 
    }, 

    Search: function(word) { 
    var foundWordInfo = {Word:null, Definitions:[]}; 
    var allDictionaryKeys = Object.keys(Dictionary); 
    var firstLetter = word.charAt(0).toUpperCase(); 
    var letterIndex = allDictionaryKeys.indexOf(firstLetter); 

    var wordKeys = Object.keys(Dictionary[firstLetter]); 
    for(i=0; i<wordKeys.length; i++) { 
     if (wordKeys[i] == word) { 
     foundWordInfo.Word = wordKeys[i]; 
     break; 
     } else {} 
    } 

    return foundWordInfo; 
}; 

Die Funktionsweise ist Sie

verwenden
var search = Dictionary.Search("calculation"); 

, wo die Suche Variable auf den Dictionary.Search foundWordInfo Objekt gleich sind.

Die Suchvariable gibt das Wort zurück, aber die Definitionen werden immer entweder als undefiniert oder als Null zurückgegeben. Ich habe versucht, Dinge wie

var definitions = wordKeys[i].Definitions; 

und

var definitions = Dictionary[letterIndex][wordKeys[i]].Definitions; 

aber nichts, was ich habe bisher Werke verwendet. Ich würde so etwas wie

var definitions = wordKeys[i].Definitions; 

aber von Rechts wegen jetzt lieber werde ich nutzen, was ich bekommen kann. Jede Hilfe wird geschätzt. Vielen Dank.

+0

Sie sind für 'var Definitionen = Dictionary [first] [wordKeys [i]] suchen. Definitions' (' firstLetter', nicht 'letterIndex'). Dies ist jedoch ein bisschen eine unangenehme Datenstruktur, und es ist mit dem Verhalten gemischt. Wie wäre es, die Suchfunktion zu trennen und 'Dictionary's Werte-Arrays zu erstellen? – Ryan

+0

Ich denke, es ist einen Versuch wert. Ich werde es versuchen. –

+0

Ich habe gerade festgestellt, dass ich nicht kann. Ich brauche jeden Buchstaben im Dictionary als Objekte, damit ich das Wort mit seinen Daten speichern kann. Wenn ich es zu einem Array mache, würde ich nur einen Wert pro Wort speichern können, was bedeutet, dass ich einem Wort nicht mehrere Definitionen hinzufügen könnte. –

Antwort

1

Sie das Wort zugreifen können definitionsDictionary[firstLetter][wordKeys[i]].definitions

var Dictionary = { 
 
    C: { 
 
    "calculation": {"definitions":["a process or result of calculating something.", "careful thought and planning that is done usually for selfish reasons."]} 
 
    }, 
 

 
    Search: function(word) { 
 
    var foundWordInfo = {Word:null, Definitions:[]}; 
 
    var allDictionaryKeys = Object.keys(Dictionary); 
 
    var firstLetter = word.charAt(0).toUpperCase(); 
 
    var wordKeys = Object.keys(Dictionary[firstLetter]); 
 
    for(i=0; i< wordKeys.length; i++) { 
 
     if (wordKeys[i] == word) { 
 
     foundWordInfo.Word = wordKeys[i]; 
 
     foundWordInfo.Definitions = Dictionary[firstLetter][wordKeys[i]].definitions; 
 
     break; 
 
     } else {} 
 
    } 
 
    return foundWordInfo; 
 
} 
 
} 
 
var search = Dictionary.Search("calculation"); 
 
console.log(search);

Alternativ verwenden, können Sie wie folgt tun.

var Dictionary = { 
 
    C: { 
 
    "calculation": {"definitions":["a process or result of calculating something.", "careful thought and planning that is done usually for selfish reasons."]} 
 
    }, 
 

 
    Search: function(word) { 
 
    var foundWordInfo = {Word:null, Definitions:[]}; 
 
    var firstLetter = word.charAt(0).toUpperCase(); 
 
    foundWordInfo.Word = Object.keys(Dictionary[firstLetter]).find(function(key) { 
 
     return key === word; 
 
    }) || null; 
 
    if(foundWordInfo.Word) 
 
     foundWordInfo.Definitions = Dictionary[firstLetter][word].definitions; 
 
    return foundWordInfo; 
 
} 
 
} 
 
var search = Dictionary.Search("calculation"); 
 
console.log(search);

+1

Sie, mein Freund, sind ein Lebensretter. Es funktioniert perfekt. Dieses Problem ist gelöst. –

+0

Sie sollten die Variablennamen als Kamelfall verwenden. Froh dir zu helfen. –