filter()
的目的是从数组中删除与URL匹配的currentGroup
。 Malappuram/123456/12
之后是否有数字都没有关系。 ES6中有什么最佳方法吗?
演示:https://jsbin.com/jozuqameto/edit?js,console
const initialLinks = [
"http://www.lchfmalayalam.com",
"https://t.me/Malappuram",
"https://t.me/keraladevelopers/42716",
"http://www.whatsapp.com",
"https://www.youtube.com/watch?v=BnbFRSyHIl4",
"http://google.com",
"https://t.me/joinchat/NHNd1hcSMCoYlnZGSC_H7g",
"https://t.me/keraladevelopers/",
"http://t.me/keraladevelopers",
"http://athimannil.com/react/",
"http://athimannil.info/",
"https://t.me/hellomates/5",
"http://t.me/Malappuram/32156",
"http://t.me/keraladevelopers/42716",
"http://t.me/joinchat/NHNd1hcSMCoYlnZGSC_H7g",
"http://t.me/keraladevelopers/",
"http://t.me/hellomates/5"
];
const normalizeTme = R.replace(
/^(?:@|(?:https?:\/\/)?(?:t\.me|telegram\.(?:me|dog))\/)(\w+)(\/.+)?/i,
(_match, username, rest) => {
return /^\/\d+$/.test(rest) ?
`https://t.me/${username.toLowerCase()}` :
`https://t.me/${username.toLowerCase()}${rest || ""}`;
}
);
const filterOwnLinks = groupUsername => {
return R.match(
/^(?:@|(?:https?:\/\/)?(?:t\.me|telegram\.(?:me|dog))\/)(\w+)(\/.+)?/i,
(_match, username, rest) => {
if (username) {
return currentGroup.toLowerCase() !== username.toLowerCase();
}
return true;
}
);
};
const currentGroup = "Malappuram";
const urls = R.uniq(initialLinks)
.filter(filterOwnLinks)
.map(normalizeTme);
console.log(initialLinks);
console.log(urls);
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.min.js"></script>
答案 0 :(得分:1)
您可以使用URL
api来解析url,并从解析url对象中获取路径名,并检查是否以currentGroup
开头
const initialLinks = ["http://www.lchfmalayalam.com","https://t.me/Malappuram","https://t.me/keraladevelopers/42716","http://www.whatsapp.com","https://www.youtube.com/watch?v=BnbFRSyHIl4","http://google.com","https://t.me/joinchat/NHNd1hcSMCoYlnZGSC_H7g","https://t.me/keraladevelopers/","http://t.me/keraladevelopers","http://athimannil.com/react/","http://athimannil.info/","https://t.me/hellomates/5","http://t.me/Malappuram/32156","http://t.me/keraladevelopers/42716","http://t.me/joinchat/NHNd1hcSMCoYlnZGSC_H7g","http://t.me/keraladevelopers/","http://t.me/hellomates/5"];
const currentGroup = "Malappuram";
const urls = [...new Set(initialLinks)]
let final = urls.filter(url => {
let parsed = new URL(url)
let pattern = new RegExp(`^\/${currentGroup}`,'i')
return !pattern.test(parsed.pathname)
})
console.log(final)
答案 1 :(得分:1)
您可以在test
回调中使用简单的正则表达式来Array.prototype.filter
:
const initialLinks = [
"http://www.lchfmalayalam.com",
"https://t.me/Malappuram",
"https://t.me/keraladevelopers/42716",
"http://www.whatsapp.com",
"https://www.youtube.com/watch?v=BnbFRSyHIl4",
"http://google.com",
"https://t.me/joinchat/NHNd1hcSMCoYlnZGSC_H7g",
"https://t.me/keraladevelopers/",
"http://t.me/keraladevelopers",
"http://athimannil.com/react/",
"http://athimannil.info/",
"https://t.me/hellomates/5",
"http://t.me/Malappuram/32156",
"http://t.me/keraladevelopers/42716",
"http://t.me/joinchat/NHNd1hcSMCoYlnZGSC_H7g",
"http://t.me/keraladevelopers/",
"http://t.me/hellomates/5"
];
const getCurrentGroupLinks = (links, regex) => {
return links.filter(link => !regex.test(link));
};
console.log(getCurrentGroupLinks(initialLinks, /Malappuram/));