2013-07-27 89 views
0

出於某種原因,我編寫的以下過濾器功能未正確添加到結果數組中。它似乎插入了最後一個結果對象的X個事件,而不是過濾器匹配的X個結果對象。用「console.log(result)」在兩個地方替換「results.push(result)」會在我的控制檯窗口中返回適當/不同的X結果對象。任何想法爲什麼這種奇怪的行爲發生?(覆蓋?)將搜索結果推送到數組的問題

的目標是具有與含有從父/相關值同級每個匹配節目名稱的對象(諸如一天&時間父母和網絡,標題,&插曲兄弟姐妹每個結果對象結果對象的X數目的結果陣列)。

// simple filter used to search show names 
filter: function(el, string) { 
    console.clear(); 
    string = $.trim(string); 
    var results = []; 
    var result = {}; 
    if (string.length) { 
     for (var i=0; i < el.length; i++) { 
      for (var j=0; j < el[i]["time"].length; j++) { 
       if (_.isArray(el[i]["time"][j].show)) { 
        for (var k=0; k < el[i]["time"][j].show.length; k++) { 
         if (el[i]["time"][j].show[k]["@attributes"]["name"].search(new RegExp(string, "i")) > -1) { 
          result.day = el[i]["@attributes"]["attr"]; 
          result["time"] = el[i]["time"][j]["@attributes"].attr; 
          result.show = el[i]["time"][j].show[k]["@attributes"]["name"]; 
          result.sid = el[i]["time"][j].show[k].sid; 
          result.network = el[i]["time"][j].show[k].network; 
          result["title"] = el[i]["time"][j].show[k]["title"]; 
          result.ep = el[i]["time"][j].show[k].ep; 
          result["link"] = el[i]["time"][j].show[k]["link"]; 
          results.push(result); 
         } 
        } 
       } 
       else { 
        if (el[i]["time"][j].show["@attributes"]["name"].search(new RegExp(string, "i")) > -1) { 
         result.day = el[i]["@attributes"]["attr"]; 
         result["time"] = el[i]["time"][j]["@attributes"].attr; 
         result.show = el[i]["time"][j].show["@attributes"]["name"]; 
         result.sid = el[i]["time"][j].show.sid; 
         result.network = el[i]["time"][j].show.network; 
         result["title"] = el[i]["time"][j].show["title"]; 
         result.ep = el[i]["time"][j].show.ep; 
         result["link"] = el[i]["time"][j].show["link"]; 
         results.push(result); 
        } 
       } 
      } 
     } 
    } 
    console.log(results); 
} 

有關該問題的現場演示,請訪問我的測試頁here。爲了方便起見,我記錄了大型對象,通過這個大型對象,當頁面完全加載時,過濾器函數意味着迭代到控制檯,以便了解該對象的結構,以便我的過濾功能對其他人更有意義(讀者這個帖子)。

而且,這裏是我如何我打電話過濾器:

// filter show names for user input 
$(".search").children("input").keyup(function() { 
    var str = $(this).val(); 
    ctv.filter(ctv.xml.DAY, str); 
}); 
+1

在開始設置屬性之前嘗試添加'var result;'結果(在if檢查字符串存在之後) –

+0

不改變任何東西。:( – tenub

回答

0

好吧,好像對我而言有點傻監督。 「在開始設置屬性之前清除結果var(即,result = {};)的確有竅門。感謝讓我考慮周圍的區域koala_dev。:)