【问题标题】:Random loop function - jsonp [duplicate]随机循环函数 - jsonp [重复]
【发布时间】:2013-08-16 21:39:07
【问题描述】:

我正在尝试随机化一个标准循环函数。这是原始循环:

success: function(data) {
for (var i = 0; i < 15; i++) {
  $("#myimages").append("<a href='" + data.data[i].link + "' target='_blank' style='float:center;width:300px; height:300px;'><img style='width:20%;' src='" + data.data[i].images.standard_resolution.url + "' /></a>");
  }
}

谁能帮帮我。到目前为止,我没有运气。

【问题讨论】:

  • 你要随机怎么办?
  • #myimages 容器将加载图像,我希望它达到 15 但随机化它们
  • 按随机顺序重新排列data,然后按原样使用for 循环。

标签: javascript json loops random


【解决方案1】:

这是一个小提琴,显示 15 个数字被随机化然后循环:http://jsfiddle.net/pH6Lx/

function Shuffle(o) {
for(var j, x, i = o.length; i; j = parseInt(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
return o;
};

$(document).ready(function() {
//init array
var testArray = [];

//Fill it with 15 numbers    
for(var i=0;i<15;i++)
    testArray.push(i);

//Shuffle it ("randomize")    
Shuffle(testArray);

//Do something with these numbers    
 for (var i=0;i<testArray.length;i++) {
     $('#random').append(testArray[i]+'<br />');
   }
});

在您的情况下,这可能都发生在您的回调中。

【讨论】:

  • 我注意到有一个 jsonp 调用,这会影响脚本吗?
  • 您应该可以将我的 document.ready 替换为您的 success: function(data) 事件,然后将您的 .append 放在我的位置。最后它只是一个循环,除了这里 0 到 15 之间的值是随机的。如果没有完整的脚本,就不可能测试它们是否能一起工作。
  • Torrobinson,他们已经指出我的来源,它是 Codepen codepen.io/projectaaron/pen/Foyhp
  • 这行得通吗? cdpn.io/tlCho
  • 确实如此,非常感谢 Torrobinson!你震撼了我的一天!!!
【解决方案2】:

首先,随机化数组,见:How to randomize (shuffle) a JavaScript array?

success: function(data) {
    function shuffleArray(array) {
        for (var i = array.length - 1; i > 0; i--) {
            var j = Math.floor(Math.random() * (i + 1));
            var temp = array[i];
            array[i] = array[j];
            array[j] = temp;
        }
        return array;
    }

    shuffleArray(data);

然后像以前一样继续:

    for (var i = 0; i < 15; i++) {
        $("#myimages").append("<a href='" + data.data[i].link + "' target='_blank' style='float:center;width:300px; height:300px;'><img style='width:20%;' src='" + data.data[i].images.standard_resolution.url + "' /></a>");
    }
}

【讨论】:

  • Lyn 这里也一样,图片不会再加载了。我注意到它使用 jsonp。可能是我的问题?
  • 那么你的代码的其他部分肯定有错误。
  • 仍在寻找和尝试...谢谢林恩
  • Lyn,我刚刚得到消息来源。请快速浏览这里。 codepen.io/projectaaron/pen/Foyhp
【解决方案3】:

如果您在 data.data 中传递图像列表,则可以执行以下操作

 success: function(data) {

    var numberOfImages = Math.min( 15, data.data.length ) ; //bug free to don't repeat        
    var alreadyShow = {}; //to don't repeat


    for (var i = 0; i < numberOfImages ; i++) {

        do{

            var imgIndex = Math.round( Math.random() * ( data.data.length - 1 ) );    

        }while( alreadyShow[imgIndex] );

        alreadyShow[imgIndex] = true;    

        $("#myimages").append("<a href='" + data.data[imgIndex].link + "' target='_blank' style='float:center;width:300px; height:300px;'><img style='width:20%;' src='" + data.data[imgIndex].images.standard_resolution.url + "' /></a>");
      }
    }

随机化,不重复

【讨论】:

猜你喜欢
  • 2011-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-28
  • 1970-01-01
  • 2013-05-02
  • 2021-12-29
相关资源
最近更新 更多