【问题标题】:Implementing wildcard at end of a string在字符串末尾实现通配符
【发布时间】:2016-05-19 08:39:09
【问题描述】:

我浏览了许多帖子(和其他网站),似乎遇到了障碍。我有以下数组:

var data_dictionary = ["youtube.com", "facebook.com", "youtube.com/feed/subscriptions", "twitter.com"]

我正在尝试返回包含 youtube.com* 的所有内容的数据。下面是我函数的相关sn-p:

var result = []     
for (var i=0; i<data_dictionary.length; i++) {
   if (data_dictionary[i].page == /^youtube.com/) {
     result.push (data_dictionary[i].page,data_dictionary[i].share)
    }
 }
 break;       
}
return result

问题在于 if 子句 (/^youtube.com/)。我怎样才能收到以下回报:

["youtube.com" , "youtube.com/feed/subscriptions"]

【问题讨论】:

  • 与正则表达式比较使用data_dictionary[i].page.match(/^youtube.com/)
  • 完美运行!很高兴学习这个(对 JS 很陌生)。

标签: javascript arrays wildcard


【解决方案1】:

您可以使用 Array.prototype.filter() 方法过滤数组并使用 RegExp.prototype.test() 方法检查匹配。

var data_dictionary = ["youtube.com", "facebook.com", "youtube.com/feed/subscriptions", "twitter.com"];

function check(data_dictionary) {
  return data_dictionary.filter(function(v) {
    return /^youtube\.com/.test(v);
    // using indexOf
    // v.indexOf('youtube.com') == 0;
  });
}
console.log(check(data_dictionary));

仅供参考:您的 if 条件仅在字符串为 '/^youtube.com/' 时为真。即('/^youtube.com/' == /^youtube.com/) === true。如果您将 if 条件更改为 /^youtube.com/.test(data_dictionary[i]),您的代码将起作用。同样在提供的数据中,pageshare 属性未定义,只有纯字符串是元素。

【讨论】:

    【解决方案2】:

    使用与以前相同的方法。但是使用“.filter”并不是一个坏主意,但我建议你比较他们的基准

    var data_dictionary = ["youtube.com", "facebook.com", "youtube.com/feed/subscriptions", "twitter.com"];
    var pattern = /^youtube.com/;
    var result = [];
    var i = 0;
    
    function loop (args) {
      for (i; i < args.length; i++) {
        if (pattern.test(args[i])) {
            result.push(args[i]);
        }
      }
     return result;
    }
    
    console.log(loop(data_dictionary)) // ["youtube.com" , "youtube.com/feed/subscriptions"]
    

    比较下面的速度我建议你使用上面的方法

    【讨论】:

      【解决方案3】:

      这里不需要正则表达式,你可以这样做;

      var data_dictionary = ["youtube.com", "facebook.com", "youtube.com/feed/subscriptions", "twitter.com"],
      filtered = data_dictionary.filter(e => !!~e.indexOf("youtube.com") && e);
      document.write("<pre>" + JSON.stringify(filtered) + "</pre>");

      或者,如果您想要一个更快的解决方案,仍然使用 Array 方法,那么

      var data_dictionary = ["youtube.com", "facebook.com", "youtube.com/feed/subscriptions", "twitter.com"],
      filtered = data_dictionary.reduce((p,c) => !!~c.indexOf("youtube.com") ? p.concat(c):p,[]);
      document.write("<pre>" + JSON.stringify(filtered) + "</pre>");

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多