2013-04-06 86 views
0

我想从flickr用户最近的200张图片中显示4张随机(和不同)图片。该代码有3个部分通过Flickr Api,Javascript选择多个随机图像

  1. JSON请求到Flickr [作品]
  2. JavaScript随机数生成[几乎工程]
  3. JSON的[作品]解析

我做了一个从flickr请求200张图片,我得到一个Json返回值,我将其保存在一个变量myArray中。我在这个var上运行一个函数,生成一个随机数(0-200)。使用拼接,我将与随机数对应的项目保存在新变量selArray中。这也从myArray中删除了该项目,防止它再次被随机选择。这个函数运行x次,x是你想要的随机数的数量。这个功能并不完全符合我想要的功能。代码的最后部分解析Json。当我在myArray上使用它时,最后一部分本身工作,但在selArray上不起作用。

这是问题所在。函数getRandoms完成后,selArray包含4个数组,每个数组都持有一个对象,而不是只保存4个对象。 这是控制台显示:

0 [Object { id="...}] 

,但我想这样的:(这是什么MYARRAY所示)

0 Object { id="...} 

所以,这里是我的问题:我该如何解决这个问题?我究竟做错了什么? 备注:我可以使代码的$ .each部分中的项目[0]替换项目来使此代码生效。

第二个问题。这是很好的代码吗?我对性能和速度特别感兴趣。

<script> 
$(document).ready(function(){ 

    var apikey = '[set api here]'; 
    var userid = '[set id here]'; 

    $.getJSON('http://api.flickr.com/services/rest/?&method=flickr.people.getPublicPhotos&api_key='+apikey+'&user_id='+userid+'&per_page=200&format=json&jsoncallback=?', 
     function(data){ 

     // flickr request ok 
     if(data.stat == 'ok'){ 

      var myArray = data.photos.photo; 
      var selArray = new Array; 

      function getRandoms(number){ 
       for(var i=0; i < number; i++){ 
        var randomNumber = Math.floor(Math.random()*myArray.length); 
        selArray.push(myArray.splice(randomNumber,1)); 
       } 
      } 

      // get random numbers 
      getRandoms(4); 

      //look at selArray in console 
      console.dir(selArray); 

      //parse json, this works 
      $.each(selArray, function(i,item){ 
       var purl = 'http://farm' + item.farm + '.static.flickr.com/' + item.server + '/' + item.id + '_' + item.secret + '_s.jpg'; 
       var container = '<a target="_blank" href="http://www.flickr.com/photos/'+userid+'/'+item.id+'/"><img class="span4" alt="'+item.title+'" src="' + purl + '"/>'; 
       $(container).appendTo('#images'); 
      }); 

     // flickr request problem 
     }else{ 
      console.log(" The request to get the array was not good "); 
     } 
    }); 

}); 
</script> 

回答

0

好像你想要的是以下几点:

selArray.push(myArray[randomNumber]); 
+0

噢,那很简单。是的,这确实解决了它。我在下面添加了这一行:'myArray.splice(randomNumber,1);'确保myArray没有任何值被随机选择两次。谢谢! – 2013-04-06 19:14:05

+0

如果有帮助,请点击答案旁边的复选标记。这可以帮助未来的访问者。 – lucuma 2013-04-06 19:17:32