0

我有一个小提琴(注意:通过 JSONP 访问一个近 2k 的文件)。它在加载时有一个由两个和三个字母单词组成的小单词列表,这些单词被加载到一个数组中。然后使用Array.prototype.filter. 这行得通。

然后我的页面开始下载 Enable1 单词列表(大多数游戏都使用单词列表)。此时,我的过滤器函数以一个空数组结束,而不是预期的 105 个单词。

我可以确认,无论是之前还是之后,

  • aa我的单词列表具有应显示的相同起始单词 ( ),
  • 列表分别有 1091 和 172820 字
  • 所有单词都是小写的,并且没有周围的空格
  • 加载时,唯一的过滤条件是“正好有两个字母”
  • 控制台上没有错误
  • Fiddle 页面的 RAM 使用量增加了 100mb (25%),我的系统剩余 35% RAM

这是我的代码。

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);
});

这是什么原因造成的?我怎样才能让它像使用较小的列表一样工作?

4

1 回答 1

1

我认为您的问题是当您“拆分”ajax 调用的结果时。如果您记录拆分响应时获得的数组,您将看到类似这样的内容:“aa\r”。

如果您使用:

app.words(data.contents.split("\r\n"));

代替:

app.words(data.contents.split("\n"));

那会更好。

于 2013-08-01T06:32:12.460 回答