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

Javascript 将修改后的数组作为参数传递给函数,javascript,jquery,Javascript,Jquery,我一直在为下面的代码挣扎太久了,试图弄清楚如何将每次单击都要修改的数组传递给函数 问题是,一旦修改clickedLinks数组,它就会影响shoplist函数中的passedLinks数组 我甚至知道为什么会发生这种情况,但我无法将其正确地应用到我的示例中。我尝试在不同的点清除阵列,但没有成功。我开始怀疑我的代码的整个逻辑是否有缺陷 任何帮助都将不胜感激 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html

我一直在为下面的代码挣扎太久了,试图弄清楚如何将每次单击都要修改的数组传递给函数

问题是,一旦修改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
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); }
步骤:

  • 点击“链接1”
  • 点击“链接2”
  • 预期结果:警报窗口显示“链接1、链接1、链接2”


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

    您正在按原样推送
    ID
    数组,但随后它会被更改。您应该使用
    slice
    推送它的副本。比如:

    passedItems.push(ids.slice());
    
    另外,我不明白是否需要
    if
    子句。如果项目已经存在,就不要添加它;还是我遗漏了什么


    有关预期结果和实际结果,请参见。

    +1。请看一看。您能更明确地说明您想要做什么吗?谢谢您的回答。这是否意味着使用slice()方法创建数组的静态副本?顺便说一句,if块与这个问题无关,我可以忽略它。该方法将数组的浅层副本作为新数组返回。您可以在其上执行
    推送
    弹出
    ,以及所有其他阵列操作。