将修改后的数组作为参数传递给函数
Passing modified array as an argument to function
我在下面的代码中挣扎了太久,试图弄清楚如何将每次单击都要修改的数组传递给函数。
问题是,一旦修改了clickedLinks数组,就会影响shoplist函数中的passedLinks数组。
我甚至对为什么会发生这种情况得到了很好的解释,但我无法将其正确地应用到我的例子中。我试着在不同的点清除数组,但没有成功。我开始怀疑我的代码的整个逻辑是否有缺陷。
如有任何帮助,我们将不胜感激。
这是代码:
<!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"
- 单击"链接2"
预期结果:警报窗口显示"link1,link1,link2"
实际结果:警报窗口显示"link1,link2,link1,link2"
您按原样推送ids
数组,但稍后会更改。您应该使用slice
推送它的副本。类似于:
passedItems.push(ids.slice());
此外,我不理解if
子句的必要性。如果项目已经存在,就不要添加它;还是我错过了什么?
请参见演示。
相关文章:
- 函数未将值作为参数传递
- 如何在HTML元素上创建函数,而不是将元素作为参数传递
- 如何传递函数中的参数
- 将参数传递给函数
- 如何向onClick事件处理程序传递一个接受参数的函数,并且仍然将该函数绑定到组件's”;这个“;上下文
- 传递带有参数的函数
- javascript,将参数传递给函数内部的闭包中的回调
- 将字符串作为参数传递给函数onclick event jquery
- 将修改后的数组作为参数传递给函数
- 代码气味-将布尔控制参数传递给函数
- 将参数传递给函数,同时保留事件处理程序
- 如何使用按钮将参数传递给函数
- 作为参数传递时如何计算函数
- 将对象作为参数传递时的 Javascript 函数作用域
- 将回调作为参数传递给函数
- 在构造控制器、服务等时作为函数参数传递之前列出的角度 JS 变量
- 作为参数传递的函数的异步执行
- 将请求作为参数传递给函数
- 什么时候需要在javascript中的函数中将对象作为参数传递
- Javascript,对象,用参数传递函数作为参数- angular, jquery概念基本误区