Javascript 将修改后的数组作为参数传递给函数
我一直在为下面的代码挣扎太久了,试图弄清楚如何将每次单击都要修改的数组传递给函数 问题是,一旦修改clickedLinks数组,它就会影响shoplist函数中的passedLinks数组 我甚至知道为什么会发生这种情况,但我无法将其正确地应用到我的示例中。我尝试在不同的点清除阵列,但没有成功。我开始怀疑我的代码的整个逻辑是否有缺陷 任何帮助都将不胜感激 代码如下:Javascript 将修改后的数组作为参数传递给函数,javascript,jquery,Javascript,Jquery,我一直在为下面的代码挣扎太久了,试图弄清楚如何将每次单击都要修改的数组传递给函数 问题是,一旦修改clickedLinks数组,它就会影响shoplist函数中的passedLinks数组 我甚至知道为什么会发生这种情况,但我无法将其正确地应用到我的示例中。我尝试在不同的点清除阵列,但没有成功。我开始怀疑我的代码的整个逻辑是否有缺陷 任何帮助都将不胜感激 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html
<!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
-
-
-
-
var clickedLinks=[];
var passedItems=[];
//将单击的链接ID收集到数组中,并将该数组作为参数传递给shoplist()
$('.items a')。单击(函数(){
如果(单击links.indexOf(this.id)!=-1){
var linkIndex=clickedLinks.indexOf(this.id);
点击链接。拼接(链接索引,1);
}否则{
单击links.push(this.id);
}
购物清单(点击链接);
});
功能购物清单(ids){
passedItems.push(ids);
警报(passedItems);
}
步骤:
实际结果:警报窗口显示“link1、link2、link1、link2”您正在按原样推送
ID
数组,但随后它会被更改。您应该使用slice
推送它的副本。比如:
passedItems.push(ids.slice());
另外,我不明白是否需要if
子句。如果项目已经存在,就不要添加它;还是我遗漏了什么
有关预期结果和实际结果,请参见。+1。请看一看。您能更明确地说明您想要做什么吗?谢谢您的回答。这是否意味着使用slice()方法创建数组的静态副本?顺便说一句,if块与这个问题无关,我可以忽略它。该方法将数组的浅层副本作为新数组返回。您可以在其上执行
推送
、弹出
,以及所有其他阵列操作。