14

元の配列に影響を与えることなく、既存の配列のコピーを作成し、配列のコピーからいくつかの項目を削除しようとしています。私はこれを試しました:

var new_arr = old_arr; //when I remove from new array the items from old array are also removed

既存の配列のまったく新しいコピーを作成するにはどうすればよいですか?

アップデート :

私がこれを行うとき:

var new_arr = old_arr.slice();

じゃあ後で :

new_arr[0].shift();
new_arr[1].shift();

old_array のアイテムは削除されます。これは 2 次元配列です。

4

5 に答える 5

19

次の2つの方法を使用できます。

function clone (src) {
    return JSON.parse(JSON.stringify(src));
}

またはこれ:

var newArray = oldArray.slice();
于 2013-01-24T10:21:29.757 に答える
9

これを行うための新しい解決策は、次のように「from」を使用することです。

const newArr = Array.from(oldArr);

ただし、これは浅いコピーであり、ネストされた要素が変更された場合、from を使用して新しく作成された配列に投影されます。最善の解決策は、使用することです

const newArr = JSON.parse(JSON.stringify(oldArr));

しかし、その方法がすべてを保証するわけではありません。たとえば、配列の要素に n => ++n のような関数が含まれている場合、JSON メソッドを使用した後に null になるため、最適な解決策は deepClone であり、その完全な説明については、

JavaScript 配列の作成

于 2019-11-02T10:17:47.320 に答える
2

ヨッシーの回答を使用すると、配列のプロトタイプを拡張できます(単純なヘルパー)。

Array.prototype.clone = function() { 
      return this.slice(0); 
}
于 2013-01-24T10:22:01.617 に答える
0

You can try .concat()

var old_arr = [1,2,3,4,5]
var new_arr = old_arr.concat()

console.log(old_arr) //1,2,3,4,5
console.log(new_arr) //1,2,3,4,5

new_arr.shift()

console.log(old_arr) //1,2,3,4,5
console.log(new_arr) //2,3,4,5

于 2021-10-07T07:48:04.790 に答える