【问题标题】:how to check a string against elements in an array如何根据数组中的元素检查字符串
【发布时间】:2015-05-08 21:06:59
【问题描述】:

我正在使用 twitter 流 api。我目前正在使用跟随和跟踪参数,但 API 将它们与 OR 结合起来,我想将它们与 AND 结合起来。从逻辑上讲,这样做的唯一方法是手动检查推文是否在我要关注的用户 ID 数组中包含一个用户 ID#,并且推文文本是否包含我要跟踪的关键字数组中的一个关键字。

我已将 tweet 对象和 tweet.text 对象转换为 JSON 字符串,如下所示:

            var tweetText = JSON.stringify(tweet.text);
            var tweetObject = JSON.stringify(tweet);

我想要这样的 if 语句:

            if tweetObject == a value in tracked ids array && tweetText == a value in tracked words array 
                do the rest of my code

我怎样才能做到这一点?我尝试使用 .indexOf() 但它只需要一个参数,所以我可以说:

            if(tweetObject.indexOf("12345678") > -1 && tweetText.indexOf("spotify") > -1) {
                do my code
            }

但这不是我想要的,我希望它通过数组并查看 tweetObject 和 tweetText 是否包含任何数组元素,如果是,则执行代码

这就是我所拥有的:

            // start twitter
            t.stream(
                "statuses/filter",
                {follow: trackedHandles, track: trackedWords, lang: "en" },
                function(stream) {
                    stream.on('data', function(tweet) {
                      //convert tweet.text& tweet.entities into two strings
                      var tweetText = JSON.stringify(tweet.text);
                      var userName = JSON.stringify(tweet.entities);
                      var tweetObject = JSON.stringify(tweet);
                      var flag = false;

                     for (var x = 0; x < trackedHandles.length; x++) {
                      //console.log(trackedHandles[x].toString());
                      var searchParam = tweetObject.indexOf(trackedHandles[x].toString());
                      if(searchParam != -1) {
                        flag = true;
                        //console.log(searchParam);
                        //console.log(trackedHandles[x].toString());

                        //incriment the keywords, and store the keywords as keys in redis (as they appear in feed)
                        for (var i = 0; i < trackedWords.length; i++) {
                          if(tweetText.indexOf(trackedWords[i]) > - 1) {
                            // incriments added value to the word
                            console.log(trackedWords[i]);
                            redisClient.incr(trackedWords[i]); 
                          }
                        }

                        //if tweetText does not contains "RT" & "@", print tweet to console.
                        if(tweetText.indexOf("RT") == -1 && tweetText.indexOf("@") == -1) {
                          //console.log(tweetText + "\r\n ");
                          //console.log(screen_name + "\r\n ");
                          //console.log(tweet);
                        } 
                      }
                    }

                    }); 
                }
            );

请帮助大家,这是我本科学位的高级项目。我的大部分应用程序都是自己完成的,我只需要这一个,因为我想要完成的是只根据特定关键字流式传输来自特定用户的推文。如果你能想到一个更合适的标题,请告诉我。提前感谢您的帮助!

【问题讨论】:

  • 这有什么问题` if(tweetObject.indexOf("12345678") > -1 && tweetText.indexOf("spotify") > -1) { 做我的代码}` 你怎么办表示任何数组元素。一个示例 tweetText 和 tweetObject 会更有帮助。
  • 它有什么问题,它需要一个元素“12345678”或“spotify”,这意味着我必须为我使用的每个用户 ID 和每个关键字做一个。现在这不是一个大问题,但我计划有 50 个用户 ID 和几个关键字。那将是一个巨大的 if 语句。
  • 我有 var trackedHandles = [推特用户 ID 列表] 和 var trackedWords = [关键字列表],我希望 if 语句检查 tweetObject 和 tweetText 是否包含各自数组中的元素之一

标签: javascript jquery json node.js twitter


【解决方案1】:

可能你想要jQuery.inArray 之类的功能

if(jQuery.inArray("12345678", tweetObject)!==-1)

【讨论】:

  • 是的,但只需要一个参数“12345678”我希望能够将数组提供给它,它会循环遍历元素并检查它是否包含该元素
【解决方案2】:

使用 for 或 forEach 循环

var tweetObjArr= [1,2,3,4,5]; 
var tweetIds = [7,3]
var flag = false;
for (var i = 0; i < tweetIds .length; i++) {
  if(tweetObjArr.indexOf(tweetIds [i]) != -1) {
    flag=true;
    break; 
  }
}

【讨论】:

  • 这就是我正在做的事情。我刚刚更新了我目前或至少我即将在问题的主要部分提出的内容。
猜你喜欢
  • 2021-10-15
  • 2023-03-31
  • 2014-05-07
  • 1970-01-01
  • 2011-12-23
  • 2013-10-03
  • 1970-01-01
  • 1970-01-01
  • 2019-10-22
相关资源
最近更新 更多