在字符串末尾实现通配符
Implementing wildcard at end of a string
我浏览了很多帖子(和其他网站),似乎遇到了障碍。我有以下数组:
var data_dictionary = ["youtube.com", "facebook.com", "youtube.com/feed/subscriptions", "twitter.com"]
我正在尝试 return 包含 youtube.com* 的所有数据。下面是我的函数的相关片段:
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/)。我怎样才能收到以下 return:
["youtube.com" , "youtube.com/feed/subscriptions"]
您可以使用 Array.prototype.filter()
method to filter array and 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])
,您的代码将起作用。同样在提供的数据中,page
和 share
属性未定义,只有纯字符串是元素。
使用与之前相同的方法。然而使用“.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"]
比较下面的速度我建议你使用上面的方法
这里不需要正则表达式,你可以这样做;
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>");
或者,如果您仍然希望使用数组方法获得更快的解决方案,那么
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>");
我浏览了很多帖子(和其他网站),似乎遇到了障碍。我有以下数组:
var data_dictionary = ["youtube.com", "facebook.com", "youtube.com/feed/subscriptions", "twitter.com"]
我正在尝试 return 包含 youtube.com* 的所有数据。下面是我的函数的相关片段:
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/)。我怎样才能收到以下 return:
["youtube.com" , "youtube.com/feed/subscriptions"]
您可以使用 Array.prototype.filter()
method to filter array and 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])
,您的代码将起作用。同样在提供的数据中,page
和 share
属性未定义,只有纯字符串是元素。
使用与之前相同的方法。然而使用“.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"]
比较下面的速度我建议你使用上面的方法
这里不需要正则表达式,你可以这样做;
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>");
或者,如果您仍然希望使用数组方法获得更快的解决方案,那么
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>");