1

私はこのようなスクリプト設定をしています(http://jsfiddle.net/YD66s/):

var countFull = new Array(0,1,2,3,4,5,6);
var countActive = new Array(0,1,2,3,4,5,6);

function pickRandom(a) {
  if(arguments[1].length == 0) {
      arguments[1] = arguments[0];
  }

  var m = Math.floor(Math.random()*arguments[1].length);
  chosen = arguments[1].splice(m,1);

  return chosen;
}

setInterval(function() {
  pickRandom(countFull,countActive);
}, 1000);

これを実行するときは、その関数に対してのみ変数を設定する必要があります。代わりに、arguments [1] = arguments [0]を作成するため、最後に向かってcountFullに影響を与えています。どのようにJavaScriptで変数を参照するだけで、それを消費せず、最終的にはarguments[1]がarguments[0]になりますか。

これが理にかなっていることを願っています。これは、さまざまなjavascript変数がPHPなどの他の言語とどのように比較されるかを私に気づかせています。

4

2 に答える 2

2

Javascript配列は単なるポインターであるため、arguments [1] = arguments [0]を実行すると、実際にはポインターを設定するだけですが、基になる配列は同じです。その結果、arguments [1]を変更するたびに、arguments[0]も変更します。やりたいことをするために、配列をコピーする必要があります。あなたはこのようにそれを行うことができます:

if (arguments[1].length == 0) {
  for(var i = 0; i < arguments[0].length; i++) {
    arguments[1][i] = arguments[0][i];
  }
}
于 2012-07-18T21:15:17.997 に答える
0

配列をコピーするには、配列を参照する代わりに、を使用しますcopy = original.slice(0)

于 2012-07-18T21:10:40.760 に答える