Articles

# ES6 sätt att klona en array bisexuell

När vi behöver kopiera en array, vi ofta gånger används slice. Men med ES6 kan du också använda spridningsoperatören för att duplicera en array. Ganska nifty, right bisexual

const sheeps = ;// Old wayconst cloneSheeps = sheeps.slice();// ES6 wayconst cloneSheepsES6 = ;

# Varför kan jag inte använda = för att kopiera en Array?

eftersom matriser i JS är referensvärden, så när du försöker kopiera den med = kopierar den bara referensen till den ursprungliga matrisen och inte värdet på matrisen. För att skapa en riktig kopia av en matris måste du kopiera över värdet på matrisen under en ny värdevariabel. På så sätt hänvisar denna nya array inte till den gamla arrayadressen i minnet.

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

# problem med referensvärden

Om du någonsin behandlat Redux eller någon statlig förvaltning ram. Du kommer att veta att oföränderlighet är super viktigt. Låt mig kort förklara. Ett oföränderligt objekt är ett objekt där staten inte kan ändras efter att den har skapats. Problemet med JavaScript är att arrays är föränderliga. Så detta kan hända:

const sheeps = ;const sheeps2 = sheeps;sheeps2.push('🐺');console.log(sheeps2);// // Ahhh 😱 , our original sheeps have changed?!console.log(sheeps);// 

det är därför vi måste klona en array:

const sheeps = ;const sheeps2 = ;// Let's change our sheeps2 arraysheeps2.push('🐺');console.log(sheeps2);// // ✅ Yay, our original sheeps is not affected!console.log(sheeps);// 

# Mutable vs oföränderliga datatyper

Mutable:

  • object
  • array
  • funktion

oföränderlig:

alla primitiva är oföränderliga.

  • string
  • nummer
  • boolean
  • null
  • odefinierad
  • symbol

# endast Grunt kopia

Observeraspread går bara en nivå djupt när du kopierar en array. Så om du försöker kopiera en flerdimensionell arrays måste du använda andra alternativ.

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);// , , ]

här är en intressant sak jag lärde mig. Grunt kopia betyder att den första nivån kopieras, djupare nivåer refereras.

# gemenskapsinmatning

# Array.från är ett annat sätt att klona Array

const sheeps = ;const cloneSheeps = Array.from(sheeps);

_tankar: @hakankaraduman _

  • _ @ hakankaraduman :_ ja, jag försöker att inte använda spridning, det förvirrar mig när jag läser koden eftersom den gör två saker, sprider eller samlar enligt sammanhang

  • CJ J : jag tycker att det bästa sättet är det som närmast matchar semantiken i operationen. Jag föredrar att använda Array.from