繁体   English   中英

jQuery删除数组元素并刷新

[英]jQuery remove array element and refresh

我想到了晚上,为时已晚。 基本上,我有一个主阵列。 我遍历它并删除一个元素(如果找到)。 我这样做有4个要素。

最后,我想显示所有剩余的元素。 问题是删除元素后无法正确刷新数组。

这是我正在使用的代码,我觉得这太过粗暴,不够优雅。

var masks = ["valueOne","valueTwo","valueThree","valueFour","valueFive"]; 

    $.each(masks,function(key,value){ 
        if("valueOne" === value){
            // do something
            masks.splice($.inArray(value, masks),1); 
        }else if("valueTwo" === value){
            // do something
            masks.splice($.inArray(value, masks),1);
        }else if("valueThree" === value){
            masks.splice($.inArray(value, masks),1);
        }else if("valueFour" === value){
            // do something
            masks.splice($.inArray(value, masks),1);
        }
    });
    console.log( masks.toString() );

我希望控制台记录“ valueFive”,但事实并非如此。 它记录以下内容:

valueTwo,valueFour,valueFive

更新数组后刷新数组的正确方法是什么? 感谢您提供任何有用的提示。

问题是$.each()通过其索引遍历数组。

(function(key,value){ ... })( 0, "valueOne" );
(function(key,value){ ... })( 1, "valueThree" );
(function(key,value){ ... })( 2, "valueFive" );

之所以跳过"valueTwo""valueFour"是因为.splice()修改了数组,将它们移动到$.each()已经访问过的索引。

masks[0] === "valueTwo"
masks[1] === "valueFour"

一种快速的解决方案是提供要复制的Array副本,该副本始终保持不变,因此您可以安全地修改原始副本。

$.each(masks.slice(0), function (key, value) {
    // ...
});
Here is the code dude...

<script src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
<script>
var masks = ["valueOne","valueTwo","valueThree","valueFour","valueFive"]; 
var count = 0;
    $.each(masks,function(key,value){ 
        //console.log( masks.toString() );
        key = key - count;
        //console.log(masks[key]);
        if("valueOne" === masks[key]){
            masks.splice($.inArray(masks[key], masks),1); 
            count++;
        }
        if("valueTwo" === masks[key]){
            masks.splice($.inArray(masks[key], masks),1);
            count++;
        }
        if("valueThree" === masks[key]){
            masks.splice($.inArray(masks[key], masks),1);
            count++;
        }
        if("valueFour" === masks[key]){
            masks.splice($.inArray(masks[key], masks),1);
            count++;
        }
    });
    console.log( masks.toString() );
    </script>

我认为正确的方法是使用JavaScript的array.filter方法。 过滤器需要一个函数,如果该函数返回false,则删除一个元素。

mask.filter(function(elem, index, array) {
    if(elem==="value") return false;
    return true;
} 

暂无
暂无

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

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