根据对象是否包含字符串来删除对象中的值

时间:2013-11-09 19:38:43

标签: javascript jquery object filter

今天一个相当简单的问题。

我有一个看起来像这样的对象:

var buttonLogos = { 
adcraft: [".","..","1.png","2.png","3.png"],
ferries: [".","..","1.png","2.png"]
}

我正在寻找一个快速的方法来删除点开头的条目,我通常会用点过滤掉任何东西,但我不能,因为我想要的字符串包含.png

它可能是一个过滤掉前两个条目的解决方案,因为它们总是“。”和“..”但是唉,我不知道怎么做到这一点。

(鼓励jQuery)

我会喜欢一些帮助!感谢。

4 个答案:

答案 0 :(得分:1)

for(i in buttonLogos){
    buttonLogos[i] = buttonLogos[i].filter(function(i){
        return !i.match(/^\.{1,2}$/);
    });
}

答案 1 :(得分:0)

您可以按如下方式使用js正则表达式,

buttonLogos.adcraft = $(buttonLogos.adcraft).filter(function(i,val){return val.match(/[^\.]/);});

答案 2 :(得分:0)

其他答案中提到的过滤器或indexOf和splice的组合也可以使用。

   var adcraft = [".","..","1.png","2.png","3.png"];
    var elems_to_rm = [];
    for (var i = 0; i < adcraft.length; i++) {
        if (adcraft[i].indexOf('.') === 0) {
            elems_to_rm.push(adcraft[i]); 
        }
    }

    for (var i = 0; i < elems_to_rm.length; i++) {
        var index = adcraft.indexOf(elems_to_rm[i]);
        adcraft.splice(index, 1);
    }

答案 3 :(得分:0)

手动尝试。通过仅指定两个项,可以从数组中删除任意数量的项 arguments:要删除的第一个项的位置和要删除的项的数量。对于 例如,splice(0,2)删除前两项。