[英]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.