2017-05-22 25 views
0

我想(數字在這種情況下)添加一些元素到隊列中,如果條件爲真(在這種情況下,「反轉」),那麼我想這些數字被倒置,然後添加到隊列。之後,我希望start()函數在控制檯中打印數字,延遲1秒。例如示例代碼的數量應打印像 後1秒:「1」,2秒後:「-2」,3秒後:「-3」,並且當時間等於queue.length然後最後一個數字應該打印,所以在這種情況下,它將是4秒後的「4」。任何人都可以給我一個函數,它可以解決這個問題?謝謝。如何通過一個包含延遲的循環隊列? (JavaScript的)

var queue = []; 
 
var invert = false; 
 

 
queue.push("1"); 
 
invert = true; 
 
queue.push("2"); 
 
queue.push("3"); 
 
invert = false; 
 
queue.push(4); 
 

 
// queue should look like this 
 
// queue = [ '1', '-2', '-3', '4' ] 
 

 
var queueLenght = queue.length; 
 
function start() { 
 
     for(var i = 0; i < queueLenght; i++){ 
 
      console.log(queue.shift()); 
 
     } 
 
} 
 

 
start();

回答

2

這是你在找什麼?

//generate queue 
 
var queue = []; 
 
var invert = false; 
 

 
function addNumber(n){ 
 
    queue.push(invert?-n:n); 
 
} 
 

 
addNumber('1'); 
 
invert = true; 
 
addNumber('2'); 
 
addNumber('3'); 
 
invert = false; 
 
addNumber('4'); 
 

 
//set interval 
 
var interval=setInterval(function(){ 
 
    if(queue.length){ 
 
    console.log(queue.shift()); 
 
    } 
 
    else{ 
 
    clearInterval(interval); 
 
    } 
 
},1000)

這正確生成隊列,創建該執行代碼的每1000毫秒的間隔,那麼一旦它完成將其清除。

0

你需要兩樣東西,首先讓我們一起去數反演,這是可以做到重寫push方法queue,像這樣:

queue.push = function(data) { 
    if (invert) data = data * -1 
    return Array.prototype.push.call(this, data); 
} 

如果你對你的程序添加代碼」 LL得到這樣的輸出:

-2
-3
+0

這樣,如果你嘗試打印'queue'對象,它也會在裏面定義'push'函數。例如,如果他只想保留其中的值,它就會改變其內部循環的行爲 – quirimmo

0

您可以創建自己的推送功能,並在其內部與陣列玩。

var queue = []; 
 
var invert = false; 
 

 
function myPush(value) { 
 
    invert ? this.push(value * -1) : this.push(value); 
 
} 
 

 
Array.prototype.myPush = myPush; 
 

 
queue.myPush(1); 
 
invert = true; 
 
queue.myPush(2); 
 
queue.myPush(3); 
 
invert = false; 
 
queue.myPush(4); 
 

 
console.log(queue);

更多更好也通過轉化爲一個放慢參數:

var queue = []; 
 

 
function myPush(value, invert) { 
 
    invert ? this.push(value * -1) : this.push(value); 
 
} 
 

 
Array.prototype.myPush = myPush; 
 

 
queue.myPush(1, false); 
 
queue.myPush(2, true); 
 
queue.myPush(3, true); 
 
queue.myPush(4, false); 
 

 
console.log(queue);