arr.slice(0)
最初は、深い非参照コピーを実行していると思いましたが、実際には浅い非参照コピーを実行しているため、配列にネストされた配列が含まれている場合でも、それらは参照されます。
var a = [1,2]
var b = [3,4]
var c = [a,b]
var d = c.slice(0)
d[0] === a // true, which means it is the /same/ object
d[0][0] = "Hi!"
a // ["Hi!", 2]
提供されるリンクの解決策は、配列の構造がわかっている場合はかなり簡単です(.slice(0)
ネストされた配列をもう一度実行するだけでうまくいきます)が、ネストされた配列の構造がわからない場合は複雑になります。
私の最初のアイデアは、すべてのレベルで、それが見つからなくなるまで、すべてをループすることです。配列物体。
- このアプローチは受け入れられますか?
- 不足している組み込み関数はありますか?
ばかげた配列をコピーするためだけにそれをすべて行う必要があるとは信じられません