0

技術的には、Javascriptには連想配列のようなものはありません。しかし、避けられない理由で、私は次のようなことをすることができなくなってしまいました

var x = [1,2,3];
x.someRequiredProperty = 'some value';

予想通り、JavascriptはJavascriptであり、機能します。しかし、元の配列を損なうことなくこの配列の複数のインスタンスで作業できるように、この「配列」のコピーを作成するにはどうすればよいですか?

私はjQueryを試しまし$.extend([], x)たが、実際には新しいコピーは得られません。足りないものはありますか?

4

3 に答える 3

1

配列にプロパティを追加することは JavaScript にとって意味がないため、「連想」Javascript 配列の考え方は好きではありません。たとえば、lengthプロパティは (プロパティではなく) インデックス付きの要素のみをカウントしfor(var x in assoc_array)ますが、配列のインデックスと「キー」を反復処理します。したがって、配列項目だけをループするには、完全な for loop を使用する必要がありますfor(var i = 0; i < assoc_array.length; i++)...

とにかく、このようなコピー機能はあなたの目的のために働くでしょう:

function copy_assoc(arr)
{
    var out = [];

    for(var key in arr)
    {
        if(!arr.hasOwnProperty(key))
        {
            continue;
        }

        out[key] = arr[key];
    }

    return out;
}

これが使用されているデモです:http://jsfiddle.net/DbVV8/3/

于 2012-07-11T09:30:39.620 に答える
0

まず、連想配列が必要な場合は、オブジェクトを使用する必要があります。

var x = {};
x[0] = 1;
x[1] = 2;
x[2] = 3;
x.someProperty = 'Foo';

次に、コピーが必要な場合は、jQuery のeach関数を使用して各プロパティを反復処理し、コピーを作成できます。

var copy = {};
$.each(x,function(i,e){
   copy[i] = e;
});

実際の例: http://jsfiddle.net/KhBC9/

于 2012-07-11T09:22:32.730 に答える
0

私自身の質問に答えさせてください-私のすべての目的のために-を使用して配列の深いクローンを作成する$.extend(true, [], myArray)と、すべてのプロパティがそのままの新しい配列が得られます。しかし、 @CodeMonkeyの答えが好きです。

于 2012-07-11T09:41:29.207 に答える