#ES6配列を複製する方法array
配列をコピーする必要があるときは、スライスを使用することがよくあります。 ただし、ES6では、spread演算子を使用して配列を複製することもできます。 かなり気の利いた、右#
const sheeps = ;// Old wayconst cloneSheeps = sheeps.slice();// ES6 wayconst cloneSheepsES6 = ;
#なぜ=を使用して配列をコピーできないのですか?JSの配列は参照値であるため、=
を使用してコピーしようとすると、参照のみが元の配列にコピーされ、配列の値はコピーされません。 配列の実際のコピーを作成するには、新しい値変数の下で配列の値をコピーする必要があります。 そうすれば、この新しい配列はメモリ内の古い配列アドレスを参照しません。
const sheeps = ;const fakeSheeps = sheeps;const cloneSheeps = ;console.log(sheeps === fakeSheeps);// true --> it's pointing to the same memory spaceconsole.log(sheeps === cloneSheeps);// false --> it's pointing to a new memory space
#参照値の問題
const sheeps = ;const fakeSheeps = sheeps;const cloneSheeps = ;console.log(sheeps === fakeSheeps);// true --> it's pointing to the same memory spaceconsole.log(sheeps === cloneSheeps);// false --> it's pointing to a new memory space
Reduxや状態管理フレームワークを扱ったことがある場合。 あなたは不変性が非常に重要であることを知っているでしょう。 簡単に説明しましょう。 不変オブジェクトは、状態が作成された後に状態を変更できないオブジェクトです。 JavaScriptの問題は、arrays
が変更可能であることです。 だからこれは起こる可能性があります:そのため、配列を複製する必要があります。
const sheeps = ;const sheeps2 = ;// Let's change our sheeps2 arraysheeps2.push('🐺');console.log(sheeps2);// // ✅ Yay, our original sheeps is not affected!console.log(sheeps);//
#可変データ型と不変データ型
可変:
- オブジェクト
- 配列
- 関数
- 関数
- 関数
- 関数
- 関数
- 関数
- 関数
- 関数
- 関数
- 関数
- 関数
- 関数
- 関数
- 関数
- 関数
- 関数
- 関数
- 関数
- 関数
- 関数
- 関数
- /li>
不変:
すべてのプリミティブは不変です。
- string
- number
- boolean
- null
- undefined
- symbol
#Shallow Copy Only
注意してくださいspread
配列をコピーするときは、一レベルの深さになります。 したがって、多次元配列をコピーしようとしている場合は、他の選択肢を使用する必要があります。p>
const nums = , ];const cloneNums = ;// Let's change the first item in the first nested item in our cloned array.cloneNums = '👻';console.log(cloneNums);// , , ]// NOOooo, the original is also affectedconsole.log(nums);// , , ]
🤓ここで私が学んだ興味深いことです。 浅いコピーとは、最初のレベルがコピーされ、より深いレベルが参照されることを意味します。
#コミュニティ入力
#配列。から配列をクローンする別の方法です
const sheeps = ;const cloneSheeps = Array.from(sheeps);
_Thanks:@hakankaraduman_
-
_@hakankaraduman :_はい、私はspreadを使用しないようにしてください、それは二つのことを行うので、コードを読むときに私を混乱させます。
-
cj J:私は最善の方法は、操作のセマンティクスに最も密接に一致するものだと思います。 私は使用することを好む
Array.from
Leave a Reply