Spread syntax của array "..." (spread syntax)
Trong JavaScript, với array có thể sử dụng spread syntax "..." để triển khai các phần tử.
Tạo array
Khi muốn thêm phần tử vào một array để tạo array mới, nếu không dùng spread syntax thì cần viết code như sau.
tsconstarr = [1, 2, 3];constarr2 = [];for (constitem ofarr ) {arr2 .push (item );}arr2 .push (4);
tsconstarr = [1, 2, 3];constarr2 = [];for (constitem ofarr ) {arr2 .push (item );}arr2 .push (4);
Bằng cách sử dụng spread syntax, implementation trên có thể viết lại đơn giản như sau.
tsconstarr = [1, 2, 3];constarr2 = [...arr , 4];
tsconstarr = [1, 2, 3];constarr2 = [...arr , 4];
Spread syntax có thể viết ở vị trí tùy ý trong array literal, nên cũng có thể chèn array khác vào giữa các phần tử.
tsconstarr = [1, 2, 3];constarr2 = [0, ...arr , 4];
tsconstarr = [1, 2, 3];constarr2 = [0, ...arr , 4];
Copy array
Khi tạo bản copy của array, spread syntax rất tiện lợi. Bản copy được tạo bằng spread syntax có thực thể khác với array gốc.
tsconstarr = [1, 2, 3];constbackup = [...arr ];arr .push (4); // Thực hiện thay đổiconsole .log (arr );console .log (backup ); // Copy không bị ảnh hưởng
tsconstarr = [1, 2, 3];constbackup = [...arr ];arr .push (4); // Thực hiện thay đổiconsole .log (arr );console .log (backup ); // Copy không bị ảnh hưởng
Lưu ý rằng phương pháp này là shallow copy (copy nông), không phải deep copy (copy sâu). Shallow copy chỉ sao chép được các phần tử ở tầng 1. Nếu trong array có array lồng nhau, các array từ tầng 2 trở đi sẽ chia sẻ giá trị với array gốc.
jsconstarr = [1, [2, 3]];constbackup = [...arr ];arr [1].push (4);console .log (arr [1]);console .log (backup [1]); // Bị ảnh hưởng bởi thay đổi
jsconstarr = [1, [2, 3]];constbackup = [...arr ];arr [1].push (4);console .log (arr [1]);console .log (backup [1]); // Bị ảnh hưởng bởi thay đổi
Giải thích chi tiết về hành vi của shallow copy như trên có tại đây.
📄️ Copy nông object
Object có thể xử lý nhiều tổ hợp key và property như một thứ duy nhất.
Cũng có thể dùng method concat() của array như một phương pháp tương đương với spread operator.
tsconstarr = [1, 2, 3];constbackup =arr .concat ();arr .push (4); // Thực hiện thay đổiconsole .log (arr );console .log (backup ); // Copy không bị ảnh hưởng
tsconstarr = [1, 2, 3];constbackup =arr .concat ();arr .push (4); // Thực hiện thay đổiconsole .log (arr );console .log (backup ); // Copy không bị ảnh hưởng
Nối array
Việc nối array cũng có thể viết đơn giản bằng spread syntax.
tsconstarr = [1, 2, 3];constarr2 = [4, 5, 6];constconcated = [...arr , ...arr2 ];
tsconstarr = [1, 2, 3];constarr2 = [4, 5, 6];constconcated = [...arr , ...arr2 ];
Destructuring assignment và rest pattern
Có syntax tương tự là rest pattern được sử dụng trong destructuring assignment, nhưng đây là syntax khác nhau nên cần lưu ý.
📄️ Destructuring assignment của array
Cơ bản