以下代码用于从单词列表构建对象。
var buildDictionary = function() {
console.log("Buildling Dictionary");
console.log(masterList);
var word, vowelString, dict = {};
for (var i = 0; i < masterList.length; i++) {
word = masterList[i][0];
vowelString = getVowels(masterList[i]);
console.log(vowelString);
if (dict[vowelString] == undefined)
dict[vowelString] = [word];
else
dict[vowelString].push(word);
}
return dict;
}
var dictionary = buildDictionary();
当按原样运行时,字典是一个空对象。但是,如果我手动调用它......
dictionary = buildDictionary();
按预期工作!
完整代码(如果相关)可在此处https://jsfiddle.net/4yts4uvr/
获取答案 0 :(得分:1)
在你的jsfiddle中,使用ajax加载masterList,你需要在回调中构建你的字典。
$.ajax({
type: "GET",
url: "../data/cmudict-0.7b"
}).success(function(content) {
// do stuff with content
}).then(function() {
// make your second ajax call (or look at jQuery.when)
$.ajax({
type: "GET",
url: "../data/cmudict-0.7b.phones"
}).success(function(content) {
// do stuff with content
}).then(function() {
var dictionary = buildDictionary();
});
});
通过这种方式,您可以确保在运行buildDictionary函数之前获得所需的所有数据。
您可以执行同步http请求(阻止),但在主线程上执行时不推荐使用它们:
注意:从Gecko 30.0(Firefox 30.0 / Thunderbird 30.0 / SeaMonkey 2.27)开始,由于对用户体验的负面影响,主线程上的同步请求已被弃用。