Articles

#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

#参照値の問題

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