# ES6 způsob klonování pole 🐑
když potřebujeme kopírovat pole, často jsme použili slice. Ale s ES6 můžete také použít operátor šíření k duplikování pole. Docela šikovný, hned 🤩
const sheeps = ;// Old wayconst cloneSheeps = sheeps.slice();// ES6 wayconst cloneSheepsES6 = ;
Proč nemohu Použít = Kopírovat Pole?
Protože pole v JS jsou referenční hodnoty, takže při pokusu o kopírování pomocí =
to bude jen kopírovat odkaz na původní pole a hodnota pole. Chcete-li vytvořit skutečnou kopii pole, musíte zkopírovat hodnotu pole pod novou proměnnou hodnoty. Tímto způsobem toto nové pole neodkazuje na starou adresu pole v paměti.
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
# problém s referenčními hodnotami
Pokud jste někdy řešili Redux nebo jakýkoli rámec správy státu. Budete vědět, neměnnost je velmi důležité. Dovolte mi to stručně vysvětlit. Neměnný objekt je objekt, u kterého nelze stav po jeho vytvoření změnit. Problém s JavaScriptem je, že arrays
jsou proměnlivé. Takže se to může stát:
const sheeps = ;const sheeps2 = sheeps;sheeps2.push('🐺');console.log(sheeps2);// // Ahhh 😱 , our original sheeps have changed?!console.log(sheeps);//
to je důvod, proč potřebujeme klonovat pole:
const sheeps = ;const sheeps2 = ;// Let's change our sheeps2 arraysheeps2.push('🐺');console.log(sheeps2);// // ✅ Yay, our original sheeps is not affected!console.log(sheeps);//
# Proměnlivých vs Neměnné Datové Typy
Proměnlivý:
- objekt
- pole
- funkce
Neměnné:
Všechna primitiva jsou neměnné.
- string
- počet
- boolean
- null
- undefined
- symbol
# Mělké Kopie Pouze
poznámka spread
jde pouze o jednu úroveň hlouběji při kopírování pole. Takže pokud se pokoušíte kopírovat vícerozměrná pole, budete muset použít jiné alternativy.
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);// , , ]
Here zde je zajímavá věc, kterou jsem se naučil. Mělká kopie znamená, že první úroveň je zkopírována, hlubší úrovně jsou odkazovány.
# komunitní vstup
# Array.z je Další Způsob, jak Klonovat Pole
const sheeps = ;const cloneSheeps = Array.from(sheeps);
_Thanks: @hakankaraduman _
-
_@hakankaraduman :_ ano, snažím se nepoužívat šíření, mate mě při čtení kódu, protože to dělá dvě věci, šíření nebo shromažďování podle kontextu
-
CJ J : myslím, že nejlepší způsob je ten, který nejvíce odpovídá sémantika operace. Dávám přednost použití
Array.from
Leave a Reply