Javascript 返回子字符串时出现问题。第二双眼睛
我想我真的需要第二双眼睛。我在返回子字符串的值时遇到一些问题。我有一条tweet,我已经将其拆分为一个单词数组,然后我使用数组过滤器来查找Twitter句柄。当我找到句柄时,我想确保推文的末尾没有“:” 当我在控制台上记录我试图返回的值时,我得到的Twitter句柄末尾没有冒号。返回的值似乎仍然有冒号。看看下面。Twitter句柄必须通过所有逻辑才能返回Javascript 返回子字符串时出现问题。第二双眼睛,javascript,node.js,twitter,Javascript,Node.js,Twitter,我想我真的需要第二双眼睛。我在返回子字符串的值时遇到一些问题。我有一条tweet,我已经将其拆分为一个单词数组,然后我使用数组过滤器来查找Twitter句柄。当我找到句柄时,我想确保推文的末尾没有“:” 当我在控制台上记录我试图返回的值时,我得到的Twitter句柄末尾没有冒号。返回的值似乎仍然有冒号。看看下面。Twitter句柄必须通过所有逻辑才能返回 getTweetedBy: function(keywords) { // Assume keywords is equal to [
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在下面指出的,filter期望返回真实或虚假的语句。有人能想出一种比过滤更好的方法吗?只希望返回一个值。我知道我可以用一个循环来实现这一点,但是一个方法会更好
谢谢
过滤器
需要一个返回truthy/false值的函数
它不收集所提供函数返回的值,而是收集函数所针对的元素。有一系列选项,包括收集匹配的元素以及您要求的附加处理。您希望分离过滤和映射功能。第一个过滤器删除不匹配的元素,第二个贴图将这些匹配的值转换为您想要的任何子字符串
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;
}, [])
}
谢谢你的回复,戴夫!有什么更好的方法吗?哇,老兄!非常有趣。这是一些伟大的见解。非常感谢。我想知道,如果你想的话,你可以研究一下这个,我只是好奇,这个方法在for循环旁边是如何执行的。哪一个跑得更快。显然,对于如此小的数组长度,这并不重要,但我很想知道。再次感谢!运行两个循环将比单个forEach(fn)循环慢,后者将比低级for循环慢。reduce函数可能由于
concat
-ing而性能不佳,但如果这是针对少数元素的数组,请选择最清晰的元素,以便将来进行编辑。