1

この「シングルトン配列宣言」をもっと短く書くことはできますか?何かを追加するさまざまなスクリプトがありますarrayが、それらは非同期で読み込まれるため、どれが最初に初期化されるかわかりませんarray

var array = array || [];
    array.push("foo");

console.debug(array[0]);

私はこのようなことを試しましたが、これはうまくいきません:

(array || []).push("foo");

助言がありますか?

4

6 に答える 6

1

既存の変数を保持する必要がある場合 (コードのどの部分が最初に実行されるかわからない場合に発生します)、コードをこれ以上短くすることはできません。

もちろん、必要に応じてデフォルト値を変更できます。

var array = array || ['foo'];

ただし、変数が既に存在する場合は、それ以上追加されfooません。おそらくあなたが望むものではありません。

古い答え

あなたの与えられた例で:

var array = ['foo'];
于 2012-10-11T12:50:52.720 に答える
0

new Array()を使用するよりも高速なので、角かっこ表記を使用してください。アイテムを動的に追加する必要がある場合は、.push();を使用する必要があります。-または、配列の数値インデックスを自分で管理します。

わかりました。非同期で読み込まれたスクリプトに関する上記のコメントは読みませんでした。他のスクリプトがロードされる前に配列を宣言して、配列が存在することを確認してみませんか?

于 2012-10-11T12:59:25.177 に答える
0

渡された配列にどのように影響を与えるかによって異なります

var newVals = (vals || []).concat(["c","d"]);

また

var newVals = [].concat((vals || []), ["c","d"]);
于 2012-10-11T13:01:59.570 に答える
0
var array = [];
array.push("foo");

console.debug(array[0]);

要素を動的に追加しない場合は、これで十分です。

var array = ["foo"];
console.debug(array[0]);

アップデート:

繰り返しますが、要素を事前に知っている場合は、

 var array = array || ['foo']
于 2012-10-11T12:50:10.850 に答える
0

最短の方法は、プッシュしようとしたときに配列が既に定義されているかどうかを確認することです。

var array = ​typeof array === 'undefined' ? ['foo'] : array.push('foo');​​​​​​​​​​

読みやすくするために、遅延ロードされたゲッターを作成することができます。

var addToArray = function (item) {
    // ensure array is defined
    if (typeof array === 'undefined') {
        array = [].push(item);
    }

    // redefine this function as a reference to push
    addToArray = array.push;
};
于 2012-10-11T12:58:06.260 に答える
0

で何をしたいのかわからないarray || []。しかし、これはあなたが同じことを得る方法です:

var array = new Array("foo");
于 2012-10-11T12:51:45.380 に答える