- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的简短且易于解释的解释可以是这样的。我有 2 个数组,FilterList
和GamesReset
。每当我使用此功能并通过复选框和下拉菜单过滤掉一些游戏时,该功能都会以类似 FilterList=GamesReset;
的内容开始。 。在我过滤掉游戏的年龄之前,这个功能似乎工作正常。该函数从未触及GamesReset
除非是类似while(i<GamesReset.length){}
的东西或FilterList=GamesReset;
。我在过滤游戏时使用的唯一工具是 FilterList.splice(i,1);
。现在,GamesReset
据我所知,绝对不应该改变。我要重置FilterList
,然后根据需要过滤掉的内容,它将开始从FilterList
中删除这些游戏。 。我遇到的问题是,GamesReset
也被过滤。这根本没有任何意义。就像我的标题一样,就像说 b=0;
, a=b;
, a++;
,现在b
等于 1。
现在,我认为这是我揭示这个问题的最好/最短的方式,而不会因为我向人们解释事情的坏习惯而过度。如果有人想查看正在发生的事情,我目前有一个可用的网页,因为我无法了解GamesReset
发生了什么。如果我是你,
这里(网址已删除,请阅读编辑)
。要使错误生效,只需将年龄更改为 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
那样被过滤,但仍然如此。
编辑:我删除了我的网址,因为答案肯定解释了一切,所以现在不需要它。
最佳答案
数组在赋值时不会被复制,两个变量将引用相同的数据。这是一篇对此进行了详细介绍的帖子:Copying array by value in JavaScript
关于javascript - 老实说很难解释..我使用a=b之类的东西,然后a++,但是b改变了。除了,这些是数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14309784/
我是一名优秀的程序员,十分优秀!