10

JavaScript で 2 つの連想配列を連結する際に問題があります。以下はサンプルコードです。

var firstArray =  new Array();
firstArray.c1 = "sam";
firstArray.c2 = "kam";
var secArray =  new Array();
secArray.c3 = "sam";
secArray.c4 = "kam";
var res = firstArray.concat(secArray);

これは既知の制限ですか?

これを達成するための最良の方法は何ですか?

4

5 に答える 5

21

機能を使用しているのではなく、Array機能だけを使用していObjectます。JavaScriptでは、Objectは連想配列です-Array整数でインデックス付けされた配列に使用します。あなたがした場合

var firstArray =  new Array();
firstArray.push("sam");  
firstArray.push("kam");
var secArray =  new Array();
secArray.push("sam");    
secArray.push("kam");
var res = firstArray.concat(secArray);

その後concat、期待どおりに動作します。

実際に連想配列をマージする場合は、次のようにします。

for (var attr in src_array) { dest_array[attr] = src_array[attr]; }

dest_arrayもちろん、これにより、に対応するキーがある既存のキーが上書きされsrc_arrayます。

于 2009-08-20T11:32:40.800 に答える
3

これを試して:

var firstArray = new Array("sam", "kam");
var secArray = new Array("sam", "kam");
var res = firstArray.concat(secArray);
于 2009-08-20T11:29:47.327 に答える
1

JavaScriptには連想配列がありません。オブジェクトハッシュがあります。配列を作成し、配列自体ではなく、そのプロパティの一部に値を割り当てています。

値はオブジェクトプロパティであるため、concatは機能しません。思い通りに連結するには、2つのオブジェクトを組み合わせる必要があります。YUI、jQuery、およびその他のJavaScriptフレームワークは、まさにそれを行うための便利なメソッドを提供します。

于 2009-08-20T11:34:10.563 に答える
1

厳密に言えば、これらは連想配列ではありません。長さがゼロの配列であり、名前付きのプロパティが追加されています。配列はJavaScriptのオブジェクトでもあるため、これらのプロパティの割り当ては機能します。しかし、それはそれらを連想配列にしません。それらをハッシュとして見る方が良いです。

のような配列メソッドconcatは、オブジェクトのプロパティではなく、配列の数値インデックス付き要素でのみ機能します。これらのオブジェクトがたまたま配列である場合でも同様です。

于 2009-08-20T11:36:16.300 に答える
1

JavaScriptの配列には、数値キーのみがあります。オブジェクトのみが非数値プロパティを持つことができます。代わりにこれを試してください:

var firstArray = {};
firstArray.c1 = "sam";
firstArray.c2 = "kam";
var secArray =  {};
secArray.c3 = "sam";  
secArray.c4 = "kam";

for (var prop in secArray) {
    if (secArray.hasOwnProperty(prop)) {
        firstArray[prop] = secArray[prop];
    }
}
于 2009-08-20T11:37:38.573 に答える