2013-07-27 53 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。:)