Jak wiemy w tablicach i obiektach JavaScript są referencyjne, ale w jaki sposób możemy skopiować tablicę bez zmiany oryginalnej tablicy później?
Oto kilka sposobów, aby to zrobić:
Wyobraź sobie, że w kodzie mamy tę tablicę:
var arr = [1, 2, 3, 4, 5];
1) Zapętlanie tablicy przez funkcję i zwracanie nowej tablicy, jak poniżej:
function newArr(arr) {
var i=0, res = [];
while(i<arr.length){
res.push(arr[i]);
i++;
}
return res;
}
2) Przy użyciu metody wycinania plasterek służy do wycinania części tablicy, wycina część tablicy bez dotykania oryginału, w wycinku, jeśli nie określi się początku i końca tablicy, wycina całość tablicę i w zasadzie wykonaj pełną kopię tablicy, dzięki czemu możemy łatwo powiedzieć:
var arr2 = arr.slice(); // make a copy of the original array
3) Również metoda kontaktowa, służy do scalenia dwóch tablic, ale możemy po prostu określić jedną z tablic, a następnie w zasadzie wykonać kopię wartości w nowej tablicy kontaktowej:
var arr2 = arr.concat();
4) Metoda strunizacji i parsowania, nie jest zalecana, ale może być łatwym sposobem kopiowania tablicy i obiektów:
var arr2 = JSON.parse(JSON.stringify(arr));
5) Metoda Array.from, nie jest to powszechnie obsługiwane, przed użyciem sprawdź obsługę w różnych przeglądarkach:
const arr2 = Array.from(arr);
6) Sposób ECMA6, również nie w pełni obsługiwany, ale babelJs może ci pomóc, jeśli chcesz dokonać transpozycji:
const arr2 = [...arr];
slice
isplice
operacje oraz nowego operatora rozprzestrzeniania iArray.from
mamy znacznie wolniejszą implementację. Spójrz na perfjs.fnfo