【问题标题】:Passing modified array as an argument to function将修改后的数组作为参数传递给函数
【发布时间】:2012-08-24 21:11:30
【问题描述】:

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

问题是,一旦修改了 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”

【问题讨论】:

  • +1 表示预期结果实际结果,看看。
  • 您能更明确地说明您想做什么吗?

标签: javascript jquery


【解决方案1】:

您按原样推送ids 数组,但稍后会更改。您应该使用slice 推送它的副本。比如:

passedItems.push(ids.slice());

另外,我不明白if 子句的必要性。如果该项目已经存在,请不要添加它;还是我错过了什么?

DEMO

【讨论】:

  • 感谢您的回答。这是否意味着使用 slice() 方法我正在创建数组的静态副本?顺便说一句,if 块与这个问题无关,我本可以忽略它。
  • slice() 方法将数组的浅拷贝作为新数组返回。您可以对其执行pushpop 以及所有其他数组操作。
猜你喜欢
  • 2018-01-20
  • 2012-12-07
  • 1970-01-01
  • 2013-01-27
  • 1970-01-01
  • 1970-01-01
  • 2014-06-27
  • 2021-04-13
相关资源
最近更新 更多