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

how to check a string against elements in an array

本文关键字:元素 检查 字符串 何根 数组      更新时间:2023-09-26

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

我已经将推文对象

和推文.文本对象转换为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);
                        } 
                      }
                    }
                    }); 
                }
            );

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

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

您可能想要jQuery.inArray这样的函数

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