繁体   English   中英

无法清空JS数组

[英]Can't empty JS array

是的,我对此非常基本(或似乎如此)的东西有疑问。 我对JS还是很陌生,但仍然想尽一切办法,但是我对PHP非常熟悉,并且从未经历过类似的事情。 我只是不能清空这个该死的数组,每次我运行这个东西时,东西总是不断增加。

我不知道为什么,而且我开始认为它与chekbox ID的命名方式有关,但我可能会误会....

id="alias[1321-213]"id="alias[1128-397]"id="alias[77-5467]"等。

我试过粘

checkboxes = []; checkboxes.length = 0;

在所有可能的地方。 在函数开始之后,在函数结尾处,甚至在函数末尾,恰好在函数之前,但这无济于事,清空此数组的唯一方法是重新加载页面。 请告诉我我做错了什么,或者至少将我指向可以进行RTFM的地方。 我在这里完全没有主意。

function() {

    var checkboxes = new Array();
    checkboxes = $(':input[name="checkbox"]');

        $.each(checkboxes,
            function(key, value) {
                     console.log(value.id);                            
                     alert(value.id);
          }
        );
     checkboxes.length = 0;                          
}

我也已经阅读了3次Mastering Javascript Arrays ,以确保我没有做错什么,但是仍然无法弄清楚。

我认为这会引起很多混乱,因为正在清理阵列 -可能不是出于您想要的目的,或者在错误的时间等。

 function () { var checkboxes = new Array(); // local-scope variable checkboxes = $(':input[name="checkbox"]'); // new instance $.each(checkboxes, /* ... */); // (truncated for brevity) checkboxes.length = 0; // this clears the array // but, for what...? // nothing happens now } 

按照您的代码片段,每次调用该函数都会重新创建并清除该数组。 但是,阵列的所有工作都是在阵列已满时完成的(清除后什么也没有发生)。

同样, checkboxes是该函数的私有变量。 该变量仅在函数执行期间存在,并且在函数完成后会被忘记。

那么,总体情况如何? 为什么要清除阵列?


猜测一下,听起来您打算在下次调用该函数时清除它。
即(为函数名填写doSomething ):

doSomething(); // log all array elements and clears the array
doSomething(); // does nothing, since the array is already empty

为此,您需要在函数外部的单个位置中定义checkboxes ,既可以将其定义为全局变量,也可以使用闭包( 尽管建议使用更复杂的选项,但建议使用闭包):

注意 :如果您以前没有处理过闭包,那么仅举一个例子就可能没有太大意义。 但是,有成千上万的可用资源 ,包括Stack Overflow ,可以比我在这里提供更好的解释。

// closure (or instantly-called function)
// allows for defining private variables, since they are only known by
// code blocks within this function

(function () {
    // private (closure-scoped) variable(s)
    var checkboxes = $(':input[name="checkbox"]');

    function doSomething() {
        $.each(checkboxes, /* ... */);

        checkboxes.length = 0;
    }
})();

闭包将运行一次,将checkboxes定义为输入数组,而doSomething将在清除数组之前对其进行迭代。

现在,最后一步是公开 doSomething原因,与checkboxes ,它也是私有的。 您可以通过将函数引用从闭包传递到闭包外部的变量来完成公开:

 var doSomething = (function () {
     /* ... */

     return doSomething;  // note that you DO NOT want parenthesis here
 })();

是否可以设定长度? ;)

复选框无论如何都是一个jquery对象而不是一个数组。

当您做checkboxes = $(':input[name="checkbox"]'); 它不再是数组,以前的任何东西都没有影响。 如果用我知道的任何语言为变量分配新内容,则变量中的内容无关紧要。

您正在犯一些与jQuery有关的错误。 请详细说明,以便我能提供帮助

您确定将所有名称都放在name =“ checkbox”吗? 似乎没有太多意义。 也许您需要$(':input[ type ="checkbox"]');

编辑:这很有趣。 上面的选择器也不是很好。 它应该是:

$('input:checkbox'); 

至于去除东西:

删除变量名

删除 arrname [elem]

是正确的方法。

分配null不会更改长度,只会带来麻烦。

怎么办呢:

checkboxes = new Array();

您也可以删除它。

delete checkboxes;

当您重新运行该功能时,它将再次搜索所有复选框。

考虑以下策略:

function() {
  var checkboxes = $(':input[name=checkbox]:not(.examined)');
  checkboxes.addClass('examined');

  $.each(checkboxes, function(key, value) {
      // ... stuff
  });
}

如果不想“污染” DOM,也可以使用.data()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM