0

オブジェクト クラス (別名プロトタイプ) で new Array() を使用して既にインスタンス化されている配列がありますが、データはありません。通常、オブジェクトを作成したら、その初期データを一度に定義します。100 行のプッシュを個別に実行せずに、このすべてのデータを割り当てる方法はありますか? 一度に大量のデータを既存の配列に割り当てる方法はありますか? おそらく次のようなものです:

myArray.push([1,2,3]);

私は使用できます:

myArray = myArray.concat([1,2,3]);

しかし、それはまったく新しい配列を作成します。これは、既存の配列に初期データを割り当てることだけを実際に行っている場合、より高価で面倒に見えます。

これを行うより良い方法はありますか?

4

3 に答える 3

1

私は質問を理解していないと思いますが、配列が実際に空の場合は、値を古いものに代入して参照を変更し、ガベージコレクターに空のものを削除させることができます:

var array = new Array()
// Later on your code
array = [1, 2, 3];

そうは言っても、追加するデータがある場合は、これを行わずに配列を初期化することをお勧めします。

于 2012-10-21T00:12:17.427 に答える
1

特に後でデータをロードする場合は特に、何かに使用する前に空の配列をインスタンス化する理由はあまりありません。あなたの例では、初期化を完全にスキップできます。

// leave it undefined initially
var array;

// set it to your values
array = [1,2,3];
于 2012-10-21T00:14:10.847 に答える
1

既存の配列について話している場合は、 を何度も呼び出す必要はありません.push()。1 回の呼び出しで複数の引数を渡すことができます。

myArray.push(1,2,3,4,5,6,7);

追加する項目が別の配列にある場合は、 を使用.applyして個別に追加できます。

var itemsToAdd = [1,2,3,4,5,6,7];

myArray.push.apply(myArray, itemsToAdd);

ただし、新しい配列の場合は、リテラル構文を使用して作成と初期化を同時に行うか、複数の項目を配列コンストラクターに渡すことができます。

あなたの質問では、配列がコンストラクターの にあると述べています.prototype。上記のコメントで述べたように、それは通常、あなたが望むものではありません。ただし、この場合に共有することを意図している場合は、上記の最初の 2 つのソリューションが機能します。

于 2012-10-21T00:40:48.170 に答える