返回子字符串的问题。第二双眼睛

时间:2015-08-27 22:36:16

标签: javascript node.js twitter

我想我真的只需要第二双眼睛。我在返回子字符串的值时遇到了一些问题。我有一条推文,我已经拆分成一个单词数组,然后我使用数组过滤器来查找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所述,过滤器期望返回真实或虚假的陈述。谁能想到一种比过滤器更好的方法?只想返回一个值。我知道我可以通过循环来做到这一点,但方法会更好。

谢谢!

2 个答案:

答案 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;
        }, [])
}