开始我有一个JavaScript阵列等jQuery的删除数组元素如果元素值与指定的字符串
["1.A","1.B","1.C","1.D",...,"2.A","2.B",...]
现在我想通过一个指定的字符串,以除去从这个数组元素。如果我指定了“1”,那么它应该删除所有的“1.A”,“1.B”,“1.C”,“1.D”....如何在jQuery中做到这一点。
开始我有一个JavaScript阵列等jQuery的删除数组元素如果元素值与指定的字符串
["1.A","1.B","1.C","1.D",...,"2.A","2.B",...]
现在我想通过一个指定的字符串,以除去从这个数组元素。如果我指定了“1”,那么它应该删除所有的“1.A”,“1.B”,“1.C”,“1.D”....如何在jQuery中做到这一点。
你可以使用本地.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;
});
'.filter'不会就地编辑数组。正如你的链接指出的那样,它创建了一个新的数组,其元素通过测试函数 – jackwanders 2012-08-09 16:24:31
@jackwanders,是的,你是对的。我已经更新了我的答案。 – 2012-08-09 16:25:08
你不需要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);
}
}
这是实际修改原始数组的唯一答案,这似乎是OP所要求的。 – 2012-08-09 16:24:07
您可以使用jQuery的地图()方法来做到这一点:
var filter = '1';
origArr = $.map(origArr, function (value, index) {
if($.inArray(filter, value) != 0) {
return value;
}
});
你并不需要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));
你似乎想要一个破坏性地修改原始数组的函数。这里有一个:
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"]
其实我不建议编码这样的破坏性功能然而,因为一个函数,复制原始阵列更安全,更灵活。
如前所述,最简单的解决方案是一个'map'或'filter'函数,它可以从您的数组中删除有问题的元素 – jackwanders 2012-08-09 16:18:48
@jackwanders:它们都不会从原始数组中删除任何内容。它们都基于返回值创建一个新的Array。这可能是一个问题,如果有其他引用的原始依赖修改。 – 2012-08-09 16:20:08
@amnotiam'arr = arr.filter(...)'或'arr = $ .map(arr,function(){...})'。只需将数组重新分配给函数的返回值即可。 – jackwanders 2012-08-09 16:24:53