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

时间:2015-03-07 08:00:26

标签: javascript jquery json node.js twitter

我正在使用twitter stream api。我目前正在使用关注&跟踪参数,但API将它们与OR组合,我想将它们与AND组合。逻辑上这样做的唯一方法是手动检查推文是否包含我要关注的userID数组中的userID#,推文文本包含要跟踪的关键字数组中的关键字。

我已将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);
                        } 
                      }
                    }

                    }); 
                }
            );

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

2 个答案:

答案 0 :(得分:0)

您可能希望jQuery.inArray功能像

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

答案 1 :(得分:0)

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