(覆盖?)将搜索结果推送到数组的问题

时间:2013-07-27 07:35:22

标签: javascript jquery

由于某种原因,我编写的以下过滤器功能未正确附加到我的结果数组。它似乎插入了最后一个结果对象的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 个答案:

答案 0 :(得分:0)

好吧,对我来说似乎有些愚蠢的疏忽。 “在开始设置属性之前清除结果var(即。result = {};)就行了。感谢让我思考一下koala_dev。:)