1. ホーム
  2. javascript

[解決済み] 多次元配列の参照ではなく、コピーを作成する - JavaScript [duplicate].

2023-02-22 04:55:31

質問

これは、"deep copying"とも呼ばれ、いくつかの記事を見つけました。一番近いのは これ ですが、これはjQueryのためのものです。

というようなことが可能だということも、2か所で見かけました。

arr2 = JSON.decode(JSON.encode(arr1));

しかし、それは明らかに非効率的です。ループして各値を個別にコピーし、すべての配列を再帰的に処理することも可能です。それも疲れるし非効率的な気がする。

では、JavaScript の多次元配列をコピーする最も効率的でライブラリに依存しない方法は何でしょうか? [[a],[b],[c]] ? 必要であれば、私は "non-IE" メソッドに完全に満足しています。

ありがとうございます。

どのように解決するのですか?

配列の配列を未知の深さまで扱っているようですが、いつでも1つの深さまでしか扱う必要がないので、シンプルで高速な方法として .slice() .

var newArray = [];

for (var i = 0; i < currentArray.length; i++)
    newArray[i] = currentArray[i].slice();

あるいは .map() の代わりに for ループの代わりに

var newArray = currentArray.map(function(arr) {
    return arr.slice();
});

つまり、これは現在のArrayを繰り返し、ネストされたArrayの浅いコピーで新しいArrayを構築しています。そして、次のレベルの深さに行くとき、同じことをすることになります。

もちろん、Arrayと他のデータが混在している場合は、スライスする前にそれが何であるかをテストしたいと思うでしょう。