如何根据数组中的元素检查字符串

how to check a string against elements in an array

我正在使用 Twitter 流 api。我目前正在使用 follow & track 参数,但 API 将它们与 OR 结合,我想将它们与 AND 结合。从逻辑上讲,执行此操作的唯一方法是手动检查推文是否包含我要跟踪的用户 ID 数组中的用户 ID#,以及推文文本是否包含我要跟踪的关键字数组中的关键字。

我已将推文 object 和 tweet.text object 转换为 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);
                        } 
                      }
                    }

                    }); 
                }
            );

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

您可能想要 jQuery.inArray 类似

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

使用 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; 
  }
}