gpt4 book ai didi

javascript - 老实说很难解释..我使用a=b之类的东西,然后a++,但是b改变了。除了,这些是数组

转载 作者:行者123 更新时间:2023-11-28 11:25:30 26 4
gpt4 key购买 nike

我的简短且易于解释的解释可以是这样的。我有 2 个数组,FilterListGamesReset 。每当我使用此功能并通过复选框和下拉菜单过滤掉一些游戏时,该功能都会以类似 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com