2013-07-31 26 views
0

我有一個fiddle(注意:通過JSONP訪問近2k文件)。它有一個由兩個和三個字母組成的加載的小單詞表,它們被加載到一個數組中。然後使用Array.prototype.filter進行過濾。這工作。170k物品陣列沒有正確處理

然後我的網頁開始下載Enable1單詞列表(大多數遊戲都使用單詞列表)。在這一點上,我的過濾器函數結束了一個空數組,而不是預期的105個字。

我可以證實的是,之前和之後,

  • 我的單詞列表有應顯示在同一起跑線字(aa),
  • 名單分別有1091分172820的話
  • 所有字都是小寫字母,並且沒有周邊空間
  • 加載時,唯一的過濾標準是「只有兩個字母」
  • 控制檯上沒有錯誤
  • 有一個100MB的(25%)增加了小提琴的頁面的RAM使用,我的系統有剩餘

這裏是我的代碼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); 
}); 

這是什麼原因造成的?我怎樣才能使它與小列表一樣工作?

回答

1

我認爲你的問題是當你「分裂」你的ajax調用的結果。如果記錄在分割響應時獲得的數組,則會看到如下所示的內容:「aa \ r」。

如果你使用:

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

相反的:

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

那會更好。

+0

好的。它[現在有效](http://jsfiddle.net/f2cQ5/8/)。謝謝 :-) – FakeRainBrigand