2012-01-11 37 views
-1

私は2次元n * m配列をゼロでいっぱいのjavascriptで生成しようとしています。それを行う最速の方法は何ですか?javascriptで配列を生成

私は単純なforループはすべての要素を0に設定するのに十分であると知っていますが、私が知りたいことは何ですか、私はマッピングでそれを行うことができません。下線LIB(あるいはネイティブマップ)と例えば

_.map(Array(n),function(a){return 0}) // makes {undefined,undefined,...} 

_.map([1,2,3,5,6],function(a){return 0}) // makes {0,0,0,0,0} 

ながら、私はマップ機能で空の配列を記入し、どのように、あるいは、なぜできない場合、誰もが説明できますか?

PS:私の問題は些細な解決策がありますが、私はもっと学びたいと思っています。なぜなら、私はグーグルで十分な答えを見つけることができません。ありがとう

+0

配列()ではなく、オブジェクトリテラル{}が必要です –

+0

空の配列で 'map'を使うと動作しないようです(' new array(42) console.log( 'AAA')}) ')。ところで、私はループまたは(一次元)n * mサイズの配列を使用することを好む。 – JiminP

答えて

4

標準のJavaScript .map()関数は、配列メンバーがundefinedの場合は無視します。そのため、Array(n)は機能しません。その後、


あなたが簡単に素早く塗りつぶしを行うために Array.prototypeにメソッドを追加することができ

...

Array.prototype.fill = function(n,v) { 
    n = n || this.length; 
    for(var i = 0; i < n; i++) 
     this[i] = v === void 0 ? i : v; 
    return this; 
}; 

...簡単なトリックがかもしれ

Array().fill(3); // [0,1,2] 

Array().fill(3, 0); // [0,0,0] 
+0

'Array.prototype.fill()'はes2015では標準です。また、値を埋めるために関数を使う必要があれば、 'new Array(size).fill(null).map(()=> Math.random()/ *または何でも* /); ' –

+1

@ BrianMcCutchon:本当に、あなたは 'Array.from(Array(size)、()=> Math.random())'またはその特定のケースでも... 'Array.from(Array(size)、Math.random ) ' –

+1

うわー、それは' Array.from() 'の便利な使い方です。 –

1

var myarr = '0000000000'.split(''); 

もう1つは、 Array(n)で作業できるようにするには、マップアレイ拡張、独自:

Array.prototype.mapx = function(callback){ 
    return this.join(',').split(',').map(callback); 
} 
//usage 
Array(5).mapx(function(){return 0;}); //=> [0,0,0,0,0] 

私は最初のものは、それをテストする(今)最速、しかし時間がないだと思うだろう。