好吧,我的简短易懂的解释可以是这样的。我有 2 个数组,FilterList
并且GamesReset
. 每当我使用此功能并使用复选框和下拉菜单过滤掉一些游戏时,该功能都会以FilterList=GamesReset;
. 在我过滤掉游戏的年龄之前,这个功能似乎工作正常。该函数永远不会触及GamesReset
,除非它类似于while(i<GamesReset.length){}
or FilterList=GamesReset;
。我过滤游戏时使用的唯一工具是FilterList.splice(i,1);
. 现在,GamesReset
据我所知,绝对不应该改变。我让它重置FilterList
,然后根据需要过滤掉的内容,它会开始从FilterList
. 我遇到的问题是,GamesReset
也被过滤掉了。其中,根本没有任何意义。所以就像我的标题一样,就像说b=0;
, a=b;
, a++;
, 现在b
等于 1。
现在,我认为这是我可以揭示这个问题的最好/最短的方法,而不会因为我向人们解释事情的坏习惯而过度使用它。如果有人想查看正在发生的事情,我目前有一个网页可用,因为GamesReset
如果我是你,我也不知道发生了什么,在这里 (url 已删除,阅读编辑)。要使错误正常工作,只需将年龄更改为 10 而不选中任何框。底部段落是GamesReset
数组(<br>
用于分隔每个数组),它是我只更改时更改的那个FilterList
在 JavaScript 中。与我上面提到的相比,如果您查看页面源代码,实际代码可能会有些偏差,但几乎 100% 相同。我还希望在没有 url 的情况下在此页面上提供代码,但我无法弄清楚如何使用包含的 html 标记来做到这一点。
实际上,这里是 JavaScript 函数。当我的问题被拒绝时,我刚刚弄清楚了 4 个空格。
function SearchFilter() {
Games = GamesReset;
plat = document.getElementById('platformcheck').checked;
rpg = document.getElementById('rpgcheck').checked;
puzz = document.getElementById('puzzlecheck').checked;
hybo = document.getElementById('hybocollectcheck').checked;
ages = document.getElementById('agescheck').value;
if ((!plat) && (!rpg) && (!puzz) && (!hybo)) {
FilterList = Games;
} else {
FilterList = [];
i = 0;
while (i < Games.length) {
Set = '';
Set = Games[i];
Set = Set.split('</>');
StrFind = Set[0];
if (
(plat && (StrFind.search(',platform,') > -1)) || (rpg && (StrFind.search(',rpg,') > -1)) || (puzz && (StrFind.search(',puzzle,') > -1)) || (hybo && (StrFind.search(',hybocollect,') > -1))) {
FilterList.push(Games[i]);
}
i++;
}
// so by now, we should have the filtered array
}
//seperate filter for ages
i = 0;
while (i < FilterList.length) { //The problem should definitely start here
Set = '';
Set = FilterList[i];
Set = Set.split('</>');
StrFind = Set[1];
if ((Math.abs(StrFind)) > ages) {
FilterList.splice(i, 1);
} else {
i++;
}
}
GL.innerHTML = GamesReset.join('<br>');
}
提醒一下,当年龄过滤器工作时,问题就开始了。而它唯一能做的就是FilterList.splice(i,1);
。但它最终改变了GamesReset
。添加时我稍微更改了此功能Games=GamesReset;
,但这是另一个尝试确保GamesReset
不会像 一样被过滤的测试FilterList
,但它仍然存在。
编辑:我删除了我的网址,因为答案肯定解释了一切,所以现在不需要它。