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);
});
在开始设置属性之前尝试添加'var result;'结果(在if检查字符串存在之后) –
不改变任何东西。:( – tenub