通过Flickr Api,Javascript选择多个随机图像

时间:2013-04-06 13:55:25

标签: javascript jquery json flickr

我想从flickr用户的最新200张图片中显示4个随机(和不同)图片。代码有3部分

  1. Json请求Flickr [作品]
  2. Javascript随机数生成器[几乎可以工作]
  3. 解析Json [作品]
  4. 我已经从flickr请求了200个图片,我得到了一个Json返回,我保存在变量myArray中。我在这个var上运行一个函数,生成一个随机数(0-200)。使用splice,我将与随机数对应的项目保存在一个新变量selArray中。这也会从myArray中删除该项目,从而防止它再次被随机选中。此函数运行x次,x是您想要的随机数。这个功能并不能完全按照我的意愿去做。代码的最后一部分解析了Json。当我在myArray上使用它时,最后一部分本身是有效的,但是对selArray不起作用。

    这就是问题所在。函数getRandoms完成后,selArray包含4个数组,每个数组包含一个对象,而不是简单地保存4个对象。 这是控制台显示的内容:

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

    但我想要这个:(这就是myArray所显示的)

    0 Object { id="...}
    

    所以,这是我的问题:我该如何解决这个问题?我究竟做错了什么? 备注:我能够通过在代码的$ .each部分中用item [0]替换item来使这段代码工作。

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

    <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>
    

1 个答案:

答案 0 :(得分:0)

看起来你想要的是以下内容:

selArray.push(myArray[randomNumber]);