如果元素值以指定的字符串开头,则jQuery删除数组元素

时间:2012-08-09 16:08:19

标签: javascript jquery

我有一个类似

的javascript数组
["1.A","1.B","1.C","1.D",...,"2.A","2.B",...]

现在我想通过指定的字符串从这个数组中删除元素。对于exm,如果我指定“1”那么它应该删除所有“1.A”,“1.B”,“1.C”,“1.D”....如何在jQuery中执行此操作。

5 个答案:

答案 0 :(得分: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;
});

答案 1 :(得分: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);
    }

}

答案 2 :(得分:0)

您可以使用jQuery map()方法执行此操作:

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

答案 3 :(得分: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));

答案 4 :(得分: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"]

我实际上并不建议编写像这样的破坏性函数,因为复制原始数组的函数更安全,更灵活。