2012-02-22 8 views
1

JavaScriptでもっと複雑なオブジェクトが必要な場合もありますが、通常はこのようなことを行います。javascript、私はこれを単一の宣言/行で行うことはできますか?

var myVar = ArrayWithMetaData(GetStringArray(),{description: "These are numbers", ...}); 

function ArrayWithMetaData(arr, params){ 
    var temp = params; 
    for(var i = 0; i < arr.length; i++) 
     temp[i] = arr[i]; 
    return temp; 
} 

//TODO: Returns an array i.e. ["one", "two", "three"], may be very large 
function GetStringArray() {} 

これを実行する方法がより短いか、同様の機能を提供するライブラリはありますか?

また、このタイプのjavascript変数の名前はありますか?

答えて

2

別のオプションは、次のように、配列は一つの特性であるストレートJSON、でオブジェクトを定義することです。

+0

* "別のオプションは、ストレートjs​​onでオブジェクトを定義することです..." * JSONではない、JavaScriptオブジェクトの初期化子です。 JSONをJavaScriptコードで直接使用することはありません。 JSONは、データファイルやオンザワイヤなどの*ソースコードで使用されるテキスト表記です。 * * JSONの場合、無効になります(JSONではキー["description"と "values"]を二重引用符で囲む必要があります)。 –

+0

フェア - 私は引用符を追加しました。 –

+0

しかし、ポイントは:これはJSONではありません。 (引用符でさえ)JSONを呼び出すのは間違いです。 (大きな邪悪なやり方ではなく、あなたは理解しています、誤解のような永続的な方法で) –

6

さて、あなたはこれを行うことができます:

var myVar = ["one", "two", "three"]; 
myVar.description = "These are numbers"; 

Arrayインスタンスは、ちょうど何か他のもののようなオブジェクト(実際には、JavaScript、すべてのarrays aren't really arraysに)、あなたはそれらに直接任意のプロパティを追加することができます。もしあなたがそうしているのなら(それには多くのユースケースがあります)、for..inを間違って使用しないでください(Myths and realities of for..in参照)。あなたの関数の結果はもうArrayではありませんので、上記が本当のArrayとして配列を残し、一方、

上記(あなたがそのすべてのことを行うことができます、しかし、あなたの関数の結果を正確に類似していません数値プロパティにのみ関連します  — "インデックス"   —好きな場合は)。 object initializer(時々、オブジェクトリテラルと呼ばれる)です

var myVar = { 
    0: "one", 
    1: "two", 
    2: "three", 
    description: "These are numbers" 
}; 

:あなたは本当にそれがArrayではないとしたい場合は、これを行うことができます。

+0

情報をいただきありがとうございますが、私はもう少し一般的なものを期待していました。私はこれを反映するために私の質問を更新します。 –

+0

@BiffMaGriff:上記はどちらもかなり一般的ですね。任意の配列に任意の非インデックスプロパティを自由に追加できます。非Arrayオブジェクトにインデックスのようなプロパティを自由に追加することができます。 –

1

技術的には、arrの各項目をparamの新しいプロパティにコピーするだけで、関数が返すオブジェクトはArrayではありません。その代わり、私がやるだろう:

function ArrayWithMetaData(arr, params){ 
    for(var k in params) 
     arr[k] = params[k]; 
    return arr; 
} 

それでもArrayのプロトタイプメソッドのすべて、およびArrayWithMetaData([],{}) instanceof Array == trueへのアクセスを持ってこの方法を。次に、あなただけのmyVar.valuesを使用してアレイにアクセスする

var myVar = {"description": "These are numbers", "values": ["one", "two", "three"]}; 

関連する問題