我想我真的只需要第二双眼睛。我在返回子字符串的值时遇到了一些问题。我有一条推文,我已经拆分成一个单词数组,然后我使用数组过滤器来查找Twitter句柄。当我找到句柄时,我想确保推文末尾没有“:”。
当我控制台记录我想要返回的值时,我得到的Twitter句柄最后没有冒号。返回的值似乎仍然有冒号。看看下面。 Twitter句柄必须通过所有逻辑才能返回。
getTweetedBy: function(keywords) {
// Assume keywords is equal to ['@AP:', 'this', 'is', 'a', 'tweet']
return keywords.filter(function(el){
if(el.substring(0, 1) === '@') {
if(el.slice(-1) === ':') {
// the value logged here is "@AP" as it should be
console.log(el.substring(0, el.length - 1));
return el.substring(0, el.length - 1);
}
}
});
}
当我运行下面的代码时,控制台正在记录[“@ AP:”]。我需要移除结肠。
filterKeywords = commonFilters.filterKeywords(keywords);
tweetedBy = commonFilters.getTweetedBy(keywords);
storyLink = commonFilters.getTweetLink(keywords);
// The console is logging ["@AP:"]
console.log(tweetedBy);
非常感谢任何帮助。
谢谢!
修改 如下面David所述,过滤器期望返回真实或虚假的陈述。谁能想到一种比过滤器更好的方法?只想返回一个值。我知道我可以通过循环来做到这一点,但方法会更好。
谢谢!
答案 0 :(得分:1)
filter
需要一个返回truthy / falsey值的函数。
它不会收集所提供函数返回的值,它会收集函数真实的元素。有很多选项,包括收集匹配的元素以及您的要求所需的额外处理。
答案 1 :(得分:1)
您想要分离过滤和映射功能。第一个过滤器删除不匹配的元素,第二个过滤器将这些匹配的值转换为您想要的任何子字符串。
getTweetedBy: function(keywords) {
// Assume keywords is equal to ['@AP:', 'this', 'is', 'a', 'tweet']
return keywords
.filter(function(el){
return (el.substring(0, 1) === '@' && el.slice(-1) === ':');
})
.map(function(el){
// the value logged here is "@AP" as it should be
console.log(el.substring(0, el.length - 1));
return el.substring(0, el.length - 1);
});
}
编辑:想要一个功能吗?你走了:
getTweetedBy: function(keywords) {
// Assume keywords is equal to ['@AP:', 'this', 'is', 'a', 'tweet']
return keywords
.reduce(function(matched, el){
if (el.substring(0, 1) === '@' && el.slice(-1) === ':') {
return matched.concat([ el.substring(0, el.length - 1) ]);
}
return matched;
}, [])
}