我有fiddle(注意:通过JSONP访问近2k文件)。它在加载时有一个小单词列表,由两个和三个字母单词组成,它们被加载到一个数组中。然后使用Array.prototype.filter
进行过滤。这很有效。
然后我的页面开始下载Enable1单词列表(大多数具有单词列表的游戏使用)。此时,我的过滤器函数最终得到一个空数组,而不是预期的105个单词。
我可以在之前和之后确认,
aa
),应显示这是我的代码。
function VM() {
var self = this;
self.characters = ko.observable(2);
self.words = ko.observableArray(document.getElementById("words")
.innerHTML.split(/\s+/g).slice(1, -1)
.map(function (word) {
return word.toLowerCase();
}));
self.possible = ko.computed(function () {
var letters = self.letters(),
starters = self.startsWith(),
enders = self.endsWith(),
characters = self.characters();
return self.words().filter(function (word) {
return word.length === parseInt(characters);
})
.filter(function (word) {
if (enders === "") return true;
for (var i = enders.length; i >= 0; --i) {
if (word.slice(-1) === enders[i]) return true;
}
return false;
})/* other filtering code */;
});
}
ko.applyBindings(app = new VM);
$.getJSON('http://anyorigin.com/get?url=https://scrabble-dictionary-search.googlecode.com/svn-history/r6/trunk/src/main/resources/enable1.txt&callback=?', function(data){
app.words(data.contents.split("\n"));
console.log(app.words().length);
});
造成这种情况的原因是什么?如何让它与较小的列表一样工作?
答案 0 :(得分:1)
我认为您的问题是当您“分割”您的ajax调用的结果时。如果您记录分割响应时获得的数组,您将看到类似的内容:“aa \ r”。
如果您使用:
app.words(data.contents.split("\r\n"));
而不是:
app.words(data.contents.split("\n"));
那会更好。