gpt4 book ai didi

javascript - 将修改后的数组作为参数传递给函数

转载 作者:行者123 更新时间:2023-11-30 05:55:29 24 4
gpt4 key购买 nike

我已经为下面的代码苦苦挣扎了太久,试图找出如何将每次点击时修改的数组传递给函数。

问题在于,一旦修改了 clickedLinks 数组,它就会影响 shoplist 函数中的 passedLinks 数组。

我什至得到了a great explanation为什么会发生这种情况,但我无法将其正确应用到我的示例中。我尝试在不同的点清除阵列,但没有成功。我开始怀疑我的代码的整个逻辑是否有缺陷。

如有任何帮助,我们将不胜感激。

代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
<title>
Test 1
</title>
<script src="http://code.jquery.com/jquery-latest.js" type=
"text/javascript">
</script>
</head>
<body>
<div class="items">
<ul>
<li>
<a href="#" id="link1">Link 1</a>
</li>
<li>
<a href="#" id="link2">Link 2</a>
</li>
<li>
<a href="#" id="link3">Link 3</a>
</li>
<li>
<a href="#" id="link4">Link 4</a>
</li>
</ul>
</div>

<script type="text/javascript">
var clickedLinks = [];
var passedItems = [];


// Collect clicked link IDs into an array and pass the array as an argument to shoplist()
$('.items a').click(function () {

if (clickedLinks.indexOf(this.id) != -1) {
var linkIndex = clickedLinks.indexOf(this.id);
clickedLinks.splice(linkIndex, 1);
} else {
clickedLinks.push(this.id);
}

shoplist(clickedLinks);

});


function shoplist(ids) {
passedItems.push(ids);
alert(passedItems);
}
</script>
</body>
</html>

步骤:

  1. 点击“链接 1”
  2. 点击“链接2”

预期结果: 警报窗口显示“link1, link1, link2”

实际结果: 警报窗口显示“link1, link2, link1, link2”

最佳答案

您按原样推送 ids 数组,但稍后它会发生变化。您应该使用 slice 推送它的副本。像这样的东西:

passedItems.push(ids.slice());

此外,我无法理解 if 子句的必要性。如果该项目已经存在,则不要添加它;还是我遗漏了什么?

参见 DEMO .

关于javascript - 将修改后的数组作为参数传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12116721/

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