0

您好,我正在尝试将新闻推文保存到三个不同的数组中,这些数组是动态创建的。

当我想从每个数组中获取文本并向 twitter 发出另一个请求时,我遇到了麻烦。

    news_tweets("reuters","1652541",3);
    function news_tweets(query, user_id,count) {
        news_array = [];
        $.getJSON("https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=false&user_id=" + user_id + "&count="+count+
        "&callback=?",
        function (data) {
      for (var i = 0; i < count; i++) {
          var user = data[i].user.name;
          var date = data[i].created_at;
          var profile_img = data[i].user.profile_image_url;
          var text = data[i].text;
          var url = (data[i].entities.urls.length > 0 ? data[i].entities.urls[0].url : '');
          news_array[i] = [{user:user,date:date,profile_img:profile_img,text:text,url:url}];
        }  
      for (var i = 0; i < news_array.length; i++) {
          for (var x=0; x<i.length; x++){
              console.log(news_array[i][x].user);
              }
            }
        });
    }

它不会在 console.log 上显示任何内容。

谢谢您的帮助!!!!!

4

4 回答 4

1

首先,确保您的长度count小于data数组的长度,否则可能会导致一些undefined值:

for (var i = 0; i < count && i < data.length; i++) …

那么,为什么要在 中创建所有这些单元素数组news_array?只使用对象。

这将解决您的实际问题:您在这些内部数组上循环错误。正确的代码是

for (var i = 0; i < news_array.length; i++) {
    for (var x = 0; x < news_array[i].length; x++){
        console.log(news_array[i][x].user);
    }
}

此外,您应该正确缩进您的代码。您周围有一些奇怪的大括号,它们不会使代码可读。

于 2012-09-14T10:22:19.127 回答
0

问题是在接近尾声x<i.length的循环中。是一个数字,所以它没有. 你可能的意思是。forilengthx < news_array[i].length

于 2012-09-14T10:26:26.697 回答
0

您可以尝试以下方法:

  • 使用该push方法在数组中附加元素/数据new_array

  • 仅使用 1 个循环在控制台上for显示值user

所以你的代码将是这样的:

news_tweets("reuters","1652541",3);

function news_tweets(query, user_id,count) {
    news_array = [];
    $.getJSON("https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=false&user_id=" + user_id + "&count="+count+
    "&callback=?",
        function (data) {
          for (var i = 0; i < count; i++) {
              var user = data[i].user.name;
              var date = data[i].created_at;
              var profile_img = data[i].user.profile_image_url;
              var text = data[i].text;
              var url = (data[i].entities.urls.length > 0 ? data[i].entities.urls[0].url : '');

              // Pushing your elements in your array, 1 by 1
              news_array.push({user:user,date:date,profile_img:profile_img,text:text,url:url});
        }  

        // Here you only need 1 loop!
        for (var i = 0; i < news_array.length; i++) {
            console.log(news_array[i][x].user);
        }
    });
}
于 2012-09-14T10:32:34.777 回答
0

第一件事是我会循环第一个直到 data.length 而不是 count 因为它是一个 api 并且它“可能”或“可能不”返回所有数据。所以循环到 data.length 将是万无一失的

你的问题是 i.length

for (var i = 0; i < news_array.length; i++) { 
    console.log(news_array[i].user);
}

这应该有效。不知道为什么你必须遍历一个循环。

于 2012-09-14T11:22:45.797 回答