我浏览了很多帖子(和其他网站),我似乎遇到了障碍。我有以下数组:
var data_dictionary = ["youtube.com", "facebook.com", "youtube.com/feed/subscriptions", "twitter.com"]
我正在尝试为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 / )。我怎样才能收到以下回报:
["youtube.com" , "youtube.com/feed/subscriptions"]
答案 0 :(得分:3)
您可以使用 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));
&#13;
仅供参考:如果字符串为'/^youtube.com/'
,则if条件仅为true。即,('/^youtube.com/' == /^youtube.com/) === true
。如果您将if条件更改为/^youtube.com/.test(data_dictionary[i])
,则代码将起作用。同样在提供的数据中page
和share
属性未定义,只有普通字符串才是元素。
答案 1 :(得分:0)
使用您之前使用的相同方法。但是使用&#34; .filter&#34;不会是一个坏主意,但我会建议你比较他们的基准
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"]
比较下面的速度我建议你使用上面的方法
答案 2 :(得分:0)
这里不需要正则表达式,你可以这样做;
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>");
&#13;
或者如果您想要使用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>");
&#13;