Hướng dẫn spread operator javascript
Nội dung bài viết Spread Operator là gì? Spread Operator trong javascript là một syntax rất mạnh mẽ trong javascript
cụ thể là ES6. Nhưng thực tế, có rất nhiều devjs vẫn chưa khai thác hết sự hiểu quả của chức năng này. Khi nào sử dụng Spread Operator thì trong bài này chúng ta lướt qua 5 cách sử dụng phổ biến nhất. "Spread Operator cho phép chuyển đổi một chuỗi thành nhiều argument (trong trường hợp gọi với hàm) hoặc thành nhiều phần tử (cho array). Thêm vào nữa nó cũng cho phép làm nhiệm vụ destructure. Operator này có syntax là 3 dấu chấm ..., khá là dị hợm và khó hiểu nhỉ, nhưng nói thế chứ cái splat bên Ruby cũng chẳng mấy dễ hiểu hơn cho người mới nhập môn." - kipalog.com Nếu thật sự bạn muốn hiểu kỹ hơn, có lẽ bạn nên dành thời gian cho bài viết này: "Three dot (...)". Bây giờ chúng ta có thể đi vào nội dung chính của bài viết này, các bạn có thể đọc chậm để hiểu hơn. Copying an arrayCó lẽ đây là một trong những cách sử dụng phổ biến nhất của Spread Operator javascript. let arr = [1,2,3,4] let copy = [...arr] // copy is [ 1, 2, 3, 4 ] Lưu ý rằng copy chưa phải là một phương pháp "Deep copying". Tips: Shallow copying và deep copying trong javascript Điều quan trọng bạn đừng quên ... , nếu bạn quên điều đó nó sẽ trở thành let arr = [1,2,3,4] let copy = [arr] // copy is [ [1, 2, 3, 4] ] Concatenate arraysDựa trên ví dụ trước, bạn có thể tạo ra một new array thông qua nhiều array cho trước. let arr1 = [1,2,3,4] let arr2 = [5,6,7,8] let concat = [...arr1, ...arr2] // concat is [ 1, 2, 3, 4, 5, 6, 7, 8 ] Copy an objectCũng giống như ví dụ về array ở phần 1 thì object cũng tương tự let obj = {a: 1, b: 2, c: 3} let copy = {...obj} // copy is {a: 1, b: 2, c: 3} Và nếu sai lầm sẽ trả giá nếu bạn quên đi "three dot..." let obj = {a: 1, b: 2, c: 3} let copy = {obj} // copy is { {a: 1, b: 2, c: 3} } Merge objectGiờ đây khi Merge object chúng ta sẽ không cần đến sử dụng cách cũ concat(). Mà bạn có thể thực hiện nhanh chóng hơn với spread trong javascript. let obj1 = {a: 1, b: 2, c: 3} let obj2 = {d: 4, e: 5, f: 6} let merge = {...obj1, ...obj2} // merge is {a: 1, b: 2, c: 3, d: 4, e: 5, f: 6} Bonus - An Error!Mặc dù thực tế rằng spread operator trải đều hoạt động trên cả array và object, bạn không thể trộn và khớp các loại dữ liệu này với nhau. Như ví dụ dưới đây. let obj = {a:1, b:2, c:3} let copy = [...obj] // this won't work! Using Spread Operator in loggingNgoài ra chúng ta có thể sử dụng spread opertor dể loop trong logging. let fruits = ['🍈', '🍉', '🍋', '🍌']; console.log(...fruits); //🍈 🍉 🍋 🍌 Ref: dev.to
Giới thiệuSpread Operator có cú pháp giống với Rest Paraterter tuy nhiên cả hai có ý nghĩa khác nhau. Rest Paramter được sử dụng khi khai báo hàm, ngược lại Spread Operator được sử dụng trong các câu lệnh, biểu thức hoặc khi gọi hàm. ES6 cung cấp một toán tử mới gọi là Spread Operator bao gồm ba dấu chấm (…). Spread Operator cho phép bạn trải ra các phần tử của một đối tượng có thể lặp lại, chẳng hạn như một array, map hoặc set. Cú phápTrước khi ES6 được ra đời thì cách phổ biến để nối mảng là sử dụng phương thức concat() của một mảng với đối số truyền vào là những mảng khác sẽ được nối với mảng này: VD: var arr_1 = [1, 2, 3]; var arr_2 = [4, 5, 6]; arr_3 = arr_1.concat(arr_2); console.log(arr_3); // [1, 2, 3, 4, 5, 6] Phía dưới là dùng spread operator const arr_1 = [1,3,5]; const arr_2 = [2,4,6, ...odd]; console.log(arr_2); // [ 2, 4, 6, 1, 3, 5 ] Trong ví dụ này, ba dấu chấm (…) nằm ở phía trước mảng odd là toán tử spread. Toán tử giải nén các phần tử của mảng odd. Dưới đây là những khác biệt chính
Các tham số còn lại phải là đối số cuối cùng của hàm. Tuy nhiên, toán tử spread có thể ở bất cứ đâu: Như ví dụ dưới đây thì nó nằm ở đầu const odd = [1,3,5]; const combined = [...odd, 2,4,6]; console.log(combined); //[ 1, 3, 5, 2, 4, 6 ] hoặc const odd = [1,3,5]; const combined = [2,...odd, 4,6]; console.log(combined); //[2, 1, 3, 5, 4, 6] Các bạn cùng xem một số tình huống sử dụng các spread operator có thể rất hữu ích. Đây là một hàm so sánh function compare(a, b) { return a - b; } Trong ES5, để truyền một mảng gồm hai số cho hàm compare(), sử dụng phương thức apply() như sau: var result = compare.apply(null, [1, 2]); console.log(result); // -1 Tuy nhiên, khi bạn dùng spread operator, bạn có thể truyền một mảng gồm 2 số cho hàm compare() let result = compare(...[1, 2]); console.log(result); // -1 Khi dùng spread operator thì a = 1 và b = 2. Sử dụng Spread Operator với ArrayNối mảngNgoài ra, bạn có thể sử dụng spread operator để ghép hai hoặc nhiều mảng let numbers = [1, 2]; let moreNumbers = [3, 4]; let allNumbers = [...numbers, ...moreNumbers]; console.log(allNumbers); // [1, 2, 3, 4] Copy mảngBạn có thể copy một mảng bằng cách sử dụng spread operator let scores = [80, 70, 90]; let copiedScores = [...scores]; console.log(copiedScores); // [80, 70, 90] Sử dụng Spread Operator với StringBạn hãy xem ví dụ sau let chars = ['A', ...'BC', 'D']; console.log(chars); // ["A", "B", "C", "D"] Trong ví dụ này, tôi đã khai báo mảng ký tự từ các chuỗi riêng lẻ. Khi áp dụng spread operator cho chuỗi ‘BC’, nó sẽ trải ra từng ký tự riêng lẻ của chuỗi ‘BC’ thành các ký tự riêng lẻ. Sử dụng spread operator với objectCopy objectCũng giống như array thì object cũng có thể copy được var obj = { name: 'ES6' }; var cloned = { ...obj }; console.log(cloned); // { name: 'ES6' } Gộp objectChúng ta có thể sử dụng spread operator để gộp các object với nhau var obj_1 = { name: 'Khanh' }; var obj_2 = { year: 2020 }; var cloned_obj = { ...obj_1, ...obj_2 }; console.log(cloned_obj); // {name: "Khanh", year: 2020} Kết luận
Các bạn có thể tham khảo các bài viết hay về JavaScript tại đây. Hãy tham gia nhóm Học lập trình để thảo luận thêm về các vấn đề cùng quan tâm. |