2012-08-09 77 views
2

开始我有一个JavaScript阵列等jQuery的删除数组元素如果元素值与指定的字符串

["1.A","1.B","1.C","1.D",...,"2.A","2.B",...] 

现在我想通过一个指定的字符串,以除去从这个数组元素。如果我指定了“1”,那么它应该删除所有的“1.A”,“1.B”,“1.C”,“1.D”....如何在jQuery中做到这一点。

+0

如前所述,最简单的解决方案是一个'map'或'filter'函数,它可以从您的数组中删除有问题的元素 – jackwanders 2012-08-09 16:18:48

+0

@jackwanders:它们都不会从原始数组中删除任何内容。它们都基于返回值创建一个新的Array。这可能是一个问题,如果有其他引用的原始依赖修改。 – 2012-08-09 16:20:08

+0

@amnotiam'arr = arr.filter(...)'或'arr = $ .map(arr,function(){...})'。只需将数组重新分配给函数的返回值即可。 – jackwanders 2012-08-09 16:24:53

回答

10

你可以使用本地.filter()功能:

var array = ["1.A","1.B","1.C","1.D",...,"2.A","2.B",...]; 
array = array.filter(function(value) { 
    return value.indexOf('1') < 0; 
}); 

或与jQuery使用.grep()方法:

var array = $.grep(array, function(value) { 
    return value.indexOf('1') < 0; 
}); 
+0

'.filter'不会就地编辑数组。正如你的链接指出的那样,它创建了一个新的数组,其元素通过测试函数 – jackwanders 2012-08-09 16:24:31

+0

@jackwanders,是的,你是对的。我已经更新了我的答案。 – 2012-08-09 16:25:08

4

你不需要jQuery来做到这一点 - 普通的JavaScript将会很好。代码循环遍历aArray,查看数组元素的第一个字符.substring,检查它是否等于您指定的前缀(在本例中为1),如果匹配,则使用.splice从数组中删除该元素:

var aArray = ["1.A","1.B","1.C","1.D","2.B","2.C"]; 

var i = aArray.length; 
while(i--) { 
    if ((aArray[i].substring(0,1) == "1") { 
     var oRemoved = aArray.splice(i,1); 
    } 

} 
+0

这是实际修改原始数组的唯一答案,这似乎是OP所要求的。 – 2012-08-09 16:24:07

0

您可以使用jQuery的地图()方法来做到这一点:

var filter = '1'; 
origArr = $.map(origArr, function (value, index) { 
    if($.inArray(filter, value) != 0) { 
     return value; 
    } 
}); 
0

你并不需要jQuery来做到这一点。

var data = ["1.A", "1.B", "1.C", "1.D", "2.A", "2.B"]; 

function removeElements(str) { 
    return data.filter(function(a) { 
     return (a.indexOf(str + ".") < 0); 
    }); 
} 

alert(removeElements(1)); 
alert(removeElements(2)); 
0

你似乎想要一个破坏性地修改原始数组的函数。这里有一个:

Array.prototype.removeElementsWithPrefix = function(prefix) { 
    for (var i = this.length - 1; i >= 0; i--) { 
    if (this[i].indexOf(prefix) == 0) { 
     this.splice(i, 1); 
    } 
    } 
    return this; 
} 


var a = ["foo", "bar", "baz"]; 
a.removeElementsWithPrefix("b"); 
a; // => ["foo"] 

其实我不建议编码这样的破坏性功能然而,因为一个函数,复制原始阵列更安全,更灵活。