由于某种原因,我编写的以下过滤器功能没有正确附加到我的结果数组中。它似乎插入了最后一个结果对象的 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);
}
有关手头问题的现场演示,请在此处访问我的测试页面。为方便起见,我正在记录大对象,当页面完全加载时,过滤器函数将通过该对象迭代到控制台,以了解该对象的结构,以便我的过滤器函数对其他人更有意义(这个帖子)。
这也是我调用过滤器的方式:
// filter show names for user input
$(".search").children("input").keyup(function() {
var str = $(this).val();
ctv.filter(ctv.xml.DAY, str);
});