我想从flickr用户的最新200张图片中显示4个随机(和不同)图片。代码有3部分
我已经从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>
答案 0 :(得分:0)
看起来你想要的是以下内容:
selArray.push(myArray[randomNumber]);