如何防止JavaScript数组在页面加载时填充?

如何防止JavaScript数组在页面加载时填充?,javascript,jquery,arrays,Javascript,Jquery,Arrays,因此,我试图通过JQuery根据multipleselect元素中的选项值填充一个数组。对于每个select元素,我希望将数组重新创建为空数组,并用新选项再次填充。但是,当我在控制台中检查数组时,它似乎已经装满了页面加载后每个select元素中的项目 以下是我的javascript代码: $( document ).ready(function() { $('#reportForm select').each(function(){ var optionValues=[];

因此,我试图通过JQuery根据multipleselect元素中的选项值填充一个数组。对于每个select元素,我希望将数组重新创建为空数组,并用新选项再次填充。但是,当我在控制台中检查数组时,它似乎已经装满了页面加载后每个select元素中的项目

以下是我的javascript代码:

$( document ).ready(function() {
   $('#reportForm select').each(function(){
        var optionValues=[];
        console.log(optionValues);
        $('option').each(function(){
           if($.inArray(this.value, optionValues) >-1){
               $(this).remove()
           }else{
              optionValues.push(this.value);
                }
           });
       });
    });
在第一个console.log()上,数组中应该没有元素,但是它有200多个元素


有什么想法吗?

这是因为您的循环正在遍历页面上的所有选项。您必须在“选择”下拉列表中找到选项。因此使用
$(this)。查找('option')
代替
$('option')
类似

$('#reportForm select').each(function(){
    var optionValues=[];
    console.log(optionValues);
    $(this).find('option').each(function(){ // $(this).find will only find options inside the current select
       if($.inArray(this.value, optionValues) >-1){
           $(this).remove()
       } else {
          optionValues.push(this.value);
       }
    });
});

这就是你的全部密码吗?这没有任何意义。@Li357如果你说“这没有任何意义”,你可以说“请提供你所有的代码,以便我们能更好地帮助你”,或者说一些能引导他提供更多上下文/细节的东西。这些代码在es6模板字符串中。可能是复制粘贴错误?它不会按原样执行。@Li357这是与此问题相关的所有JS代码。我对StackOverflow的问题不太熟悉,很抱歉没有提供足够的信息。@PatrickCoyle如果您将
optionValues
分配给一个空数组,然后立即记录它,它将保持为空。这不是一个范围问题,因为
var
是函数范围…谢谢!这就是我一直在寻找的答案。@PatrickCoyle在答案上打了个勾,这样其他人就可以理解老年退休金计划得到了这个问题所需的答案。我做到了:)我只需要等待计时器。