我想从flickr用户最近的200张图片中显示4张随机(和不同)图片。该代码有3个部分通过Flickr Api,Javascript选择多个随机图像
- JSON请求到Flickr [作品]
- JavaScript随机数生成[几乎工程]
- 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>
噢,那很简单。是的,这确实解决了它。我在下面添加了这一行:'myArray.splice(randomNumber,1);'确保myArray没有任何值被随机选择两次。谢谢! – 2013-04-06 19:14:05
如果有帮助,请点击答案旁边的复选标记。这可以帮助未来的访问者。 – lucuma 2013-04-06 19:17:32