6

興味深い... この Ruby を JS でどのように記述しますか?

Array.new(3, Array.new(3, 0))

返す

[[0, 0, 0], [0, 0, 0], [0, 0, 0]]

いろいろ試してみましたが、どれもむずかしいようです。Rubyほどきれいにできないものもあると思いますが、これにどのように取り組みますか?

多分私はJSのトリックを1つか2つ学ぶでしょう;)

編集 この Ruby コードは、実際には 3 つの配列を作成しないことが明らかになりました。他の人が参照する1つの配列を作成します。これは意図ではありませんでした。X個の要素とY個のネストされた要素を持つ2次元配列をJSで簡単にマップする方法を探しています。

また...これは不自然な例です。意図は、3 を任意の数に置き換えることができるようにすることです。これは 3 を使用した単なる例です。

4

6 に答える 6

4

次のように定義できます。

var arr = [[0, 0, 0], [0, 0, 0], [0, 0, 0]];

基本的に、明示的に定義しています。ただし、この配列には 3 つの異なる配列への参照が含まれています (合計 4 つ)。Ruby のように動作させるには、この動作を模倣する関数を作成する必要があります。

function arr(size, element) {
   var ret = [];

   for(var i = 0; i < size; i++) {
       ret.push(element);
   }

   return ret;      
}

次に、次のことができます。

var myArray = arr(3, arr(3, 0)); //myArray contains [[0, 0, 0], [0, 0, 0], [0, 0, 0]]

これは、配列内の各要素が同じ配列への参照であるため、Ruby で見られる動作により当てはまります(合計で2 つの配列しか作成しません)。これを確認するには、 を実行してmyArray[0][1] = 2;から検査しmyArrayます。各配列の 2 番目の要素がmyArray2 に設定されているはずです。

于 2012-07-08T02:29:19.940 に答える
2

長さを追跡するため、または後で値を割り当てるためだけに、空の配列コンテナが必要な場合は、これを行うことができます。少しハックですが、動作するはずです。

var a = [[,,],[,,],[,,]]

a[1][1] = 'foo'
alert(a[1][1]) //foo
于 2012-07-08T02:26:35.587 に答える
2

以下は、4 つの配列を作成する場合の有効な Javascript 構文です。

[[0, 0, 0], [0, 0, 0], [0, 0, 0]]

編集:

実際、Ruby コードは 2 つの配列しか作成しません。1 つの配列は[0,0,0]、もう 1 つの配列には、その配列への 3 つの参照が含まれています。あなたが変われarray[0][2]ばあなたも変わるarray[1][2]。これでよろしいですか?同等の JavaScript コードは次のようになります。

var b = [0, 0, 0];
var a = [b, b, b];
于 2012-07-08T02:28:17.460 に答える
1

Rubyでは、このような目的の効果を得ることができます

a = Array.new(3) { Array.new(3, 0) }
p a #[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
a[0][0] = 1
p a #[[1, 0, 0], [0, 0, 0], [0, 0, 0]]

このようなJSで

var multi_dim = function(a, b, value) {
  var myObj = [];
  for (i=0;i<a;i++) {
    myObj[i] = [];
    for (j=0;j<b;j++) {
      myObj[i][j] = value;
    }
  }
  return myObj;
};

var c = multi_dim(3,3,0);
WScript.echo(c); //0,0,0,0,0,0,0,0,0
c[0][0]=1
WScript.echo(c); //1,0,0,0,0,0,0,0,0

Windows やブラウザーにない場合は、WScript.echo を document.write に置き換えます。

于 2012-07-08T15:17:16.877 に答える
0

私はあなたがこれを行うことができると思います:http://jsfiddle.net/PZBUr/

var i = "[0, 0, 0]";
var myArray = new Array(i, new Array(i, new Array(i)));
document.write(myArray);
​
于 2012-07-08T02:32:36.660 に答える
0

それを行う別の方法は次のとおりです。

var arr = new Array(
    new Array(0, 0, 0),
    new Array(0, 0, 0),
    new Array(0, 0, 0)
);

または単に

var arr = [
    [0, 0, 0],
    [0, 0, 0],
    [0, 0, 0]
]
于 2012-07-08T02:34:58.337 に答える