【问题标题】:Removing a value in an object based on if it contains a string根据对象是否包含字符串来删除对象中的值
【发布时间】:2013-11-09 19:38:43
【问题描述】:

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

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

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

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

过滤掉前两个条目可能是一种解决方案,因为它们总是“。”和“..”,但是我什至不知道该怎么做。

(鼓励使用 jQuery)

我希望得到一些帮助!谢谢。

【问题讨论】:

  • 你可以对每个数组属性值做 splice(2)。
  • 啊,错了。你必须做 splice(0, 2) 这将删除前两项。例如:for (var prop in buttonLogos) { buttonLogos[prop].splice(0, 2); }

标签: javascript jquery object filter


【解决方案1】:
for(i in buttonLogos){
    buttonLogos[i] = buttonLogos[i].filter(function(i){
        return !i.match(/^\.{1,2}$/);
    });
}

【讨论】:

  • 请注意Array.filter在IE8及以下版本中不可用。
  • 我应该...但你已经为我做了 - 这是一个星期六晚上,我已经喝醉了,所以 IE8 可以去旋转:P
  • 我们两个!拧 IE 8!
【解决方案2】:

你可以使用js正则表达式如下,

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

【讨论】:

    【解决方案3】:

    其他答案中提到的过滤器或 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);
        }
    

    【讨论】:

      【解决方案4】:

      手动尝试。只需指定两个即可从数组中删除任意数量的项目 参数:要删除的第一个项目的位置和要删除的项目数。为了 例如,splice(0, 2) 删除前两项。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-16
        • 2011-02-11
        • 1970-01-01
        • 2018-10-06
        • 1970-01-01
        • 1970-01-01
        • 2021-10-16
        • 1970-01-01
        相关资源
        最近更新 更多