2017-05-22 6 views
0

いくつかの要素(この場合は数値)をキューに追加したい場合、条件が真(この場合は "invert")の場合、数値を反転してキューに追加する。その後、私は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

あなたが最初のは、番号invertionで行きましょう、これはこのように、queueためpushメソッドをオーバーライドして行うことができ、二つのことを必要とする:あなたのプログラム

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

あなたはあなたにそのコードを追加した場合」

-2
-3
4 01:LLこの出力を得ます
+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);

はるかに優れてPARAMTERとしても反転を渡す:

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);

関連する問題