![](/img/trans.png)
[英]How to make multiple instances of an object, without reusing the same variable name in JavaScript
[英]how to make multiple instances in JavaScript
我試圖生成隨機數以從數組中選擇隨機項以更新圖片拼貼,我注意到有時生成的數與先前生成的數相同,導致一張圖片更新2-3次,因此檢查一下我認為是如果我將上次生成的隨機數存儲到變量中,並執行一個檢查上一次生成的值是否等於當前生成的值的函數,那就很好了,它會繼續生成數字,直到生成非相等值。
在我想要多個實例之前,它工作正常……作為存儲最后一個值的變量是相同的,我得到相同的數字。
var bgs = document.getElementById('collage').getElementsByClassName('bg');
var images = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var lv = null;
function get_random(length) {
arr = [];
while (arr.length < 1) {
var cv = Math.floor(Math.random() * length);
if (lv === cv) {
arr = [];
continue;
}
else if (lv !== cv) {
arr.push(cv);
break;
}
}
lv = arr[0];
return arr[0];
}
function update_collage() {
var img = images[get_random(images.length)];
var target = bgs[get_random(bgs.length)];
target.style.background = "url('assets/img/thumbs/" + img + ".jpg') no-repeat center";
target.style.backgroundSize = "cover";
}
window.setInterval(function(){
update_collage();
}, 1200);
我該如何糾正,如何創建函數或變量的多個實例
我建議您使用生成器函數並根據需要實例化它:
// Generate pairwise unique random numbers < max: function* generate_random(max) { let prev; while (true) { let next = Math.floor(Math.random() * max); if (prev === next) continue; yield prev = next; } } // Example: let generators = [generate_random(3), generate_random(3)]; for (let i = 0; i < 10; ++i) { // Both generators run independently: console.log(generators[0].next().value, generators[1].next().value); }
在您的代碼中,您可以例如替換
var img = images[get_random(images.length)];
var target = bgs[get_random(bgs.length)];
同
var img = images[generators[0].next().value];
var target = bgs[generators[1].next().value];
哪里
var generators = [generate_random(images.length), generate_random(bgs.length)];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.