jQuery删除数组元素并刷新

时间:2015-12-01 05:08:04

标签: javascript jquery

我认为我太晚才能弄明白这一点。基本上,我有一个主数组。我循环它并删除一个元素,如果我找到它。我为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

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

3 个答案:

答案 0 :(得分:4)

问题是$.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) {
    // ...
});

答案 1 :(得分:1)

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
 CGPoint centerPoint = CGPointMake(self.clnViewWorkoutTitles.center.x + self.clnViewWorkoutTitles.contentOffset.x,
                                      self.clnViewWorkoutTitles.center.y + self.clnViewWorkoutTitles.contentOffset.y);
    NSIndexPath *centerCellIndexPath = [self.clnViewWorkoutTitles indexPathForItemAtPoint:centerPoint];
    [self.clnViewWorkoutContent scrollToItemAtIndexPath:[NSIndexPath indexPathForItem:centerCellIndexPath.item inSection:0] atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:YES];
    [self.clnViewWorkoutTitles scrollToItemAtIndexPath:centerCellIndexPath atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:YES];}

答案 2 :(得分:0)

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

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