Trong ngôn ngữ lập trình Google Apps Script – ngôn ngữ lập trình mà Google Sheets hỗ trợ để tự động hóa các sản phẩm liên quan, mảng (Array trong tiếng Anh) là một cấu trúc dữ liệu rất hay được sử dụng. Mảng lưu trữ dữ liệu như một tập hợp của các phần tử hay thành phần mà chúng ta có thể dễ dàng truy cập được khi cần.
Trong bài viết này, chúng ta sẽ có các phần từ khai báo mảng, cho tới truy cập vào các thành phần của mảng, đọc các tính chất của mảng và sử dụng các phương thức được mảng hỗ trợ sẵn trong Google Apps Script.
Để giúp các bạn tiếp cận tốt hơn với kiến thức này, Thanh đã chuẩn bị một video chi tiết về tất cả các kiến thức về mảng trong Google Apps Script với những nội dung sau đây:
01 Giới thiệu về mảng trong Google Apps Script (00:00)
02 Cách khai báo mảng trong Google Apps Script (00:50)
03 Ghi dữ liệu mảng ra Log của Google Apps Script (03:47)
04 Thực hành trên Console của trình duyệt (04:29)
05 Cách truy cập vào các thành phần của mảng (05:07)
06 Độ dài của mảng trong Google Apps Script (07:13)
07 Lặp lần lượt qua các thành phần của mảng (08:18)
08 Thêm một thành phần mới vào cuối mảng với push (10:52)
09 Thêm một thành phần mới vào đầu mảng với unshift (11:36)
10 Xóa một thành phần ở vị trí cuối mảng với pop (12:35)
11 Xóa một thành phần ở vị trí đầu mảng shift (13:20)
12 Tìm vị trí của một thành phanà trong mảng với indexOf (14:12)
13 Đảo ngược một mảng với reverse (16:00)
14 Ứng dụng để tìm kiếm dữ liệu trong mảng (16:42)
15 Lọc mảng trong Google Apps Script với hàm filter (19:05)
16 Chuyển mảng hai chiều thành mảng một chiều trong Google Apps Script (21:45)
Xem nhanh
Trong Google Apps Script, để khai báo một mảng, bạn có thể sử dụng 2 cú pháp: sử dụng ngoặc vuông hoặc sử dụng từ khóa Array, các thành phần trong mảng sẽ được ngăn cách nhau bởi dấu phẩy “,”
Khai báo mảng sử dụng ngoặc vuông:
const mixedTypeArray = [ 100, 200, 234, true, {} ]
Khai báo mảng sử dụng từ khóa Array:
const mixedTypeArray2 = new Array(100, 200, 234, true, {} )
Vị trí của một thành phần trong mảng được gọi là index / số thứ tự. Trong Google Apps Script, thứ tự được bắt đầu từ số 0, và tăng dần qua mỗi thành phần 1 đơn vị.
Trong ví dụ trên thì, số 100 có index = 0, số 200 có index = 1, … v.v
Số lượng thành phần hay phần tử trong một mảng sẽ quyết định độ lớn của mảng, trong ví dụ trên, mảng mixedTypeArray có 5 thành phần, nên ta nói độ lớn hay độ dài của mảng là 5
Độ lớn của mảng trong Google Apps Script không cố định, bạn có thể thêm bớt hoặc thay đổi độ lớn của mảng, chúng ta sẽ nói kỹ hơn về phần này ở trong các đoạn sau.
Cú pháp chung để chúng ta có thể truy cập vào một thành phần trong mảng là:
const element = array[ index ]
Ví dụ chúng ta có mảng sau đây:
const salad = ['🍅', '🍄', '🥦', '🥒', '🌽', '🥕', '🥑'];
Nếu chúng ta muốn truy cập vào thành phần “cà chua” trong mảng, thì chúng ta có thể viết câu lệnh như sau:
salad[ 0 ]; // Kết quả: '🍅'
salad[ 4 ]; // Kết quả: '🌽'
Chúng ta có thể sử dụng độ lớn của mảng – length để có thể truy cập mảng theo chiều từ phải qua trái:
const salad = ['🍅', '🍄', '🥦', '🥒', '🌽', '🥕', '🥑'];
const len = salad.length;
salad[len - 1]; // '🥑'
salad[len - 3]; // '🌽'
Bạn cũng có thể lặp qua các thành phần của mảng sử dụng vòng lặp for hay forEach như sau
const salad = ['🍅', '🍄', '🥦', '🥒', '🌽', '🥕', '🥑'];
for(let i=0; i<salad.length; i++) {
console.log(`Element at index ${i} is ${salad[i]}`);
}
Để thêm thành phần vào một mảng trong Google Apps Script, chúng ta có thể dùng phương thức push()
Giả sử chúng ta có mảng salad và muốn thêm lạc vào mảng này:
const salad = ['🍅', '🍄', '🥦', '🥒', '🌽', '🥕', '🥑'];
salad.push('🥜')
Mảng kết quả nhận được sẽ là: '🥜'
sẽ được thêm vào cuối mảng:
['🍅', '🍄', '🥦', '🥒', '🌽', '🥕', '🥑', '🥜']
Nếu bạn muốn thêm một thành phần vào đầu của mảng, thay vì dùng push()
thì chúng ta có thể dùng unshift()
const salad = ['🍅', '🍄', '🥦', '🥒', '🌽', '🥕', '🥑'];
salad.unshift('🥜');
Và kết quả nhà được là:
['🥜', '🍅', '🍄', '🥦', '🥒', '🌽', '🥕', '🥑']
Cách nhanh và dễ nhất để có thể loại bỏ một thành phần từ một mảng là sử dụng phương thức pop()
. Mỗi lần bạn gọi phương thức pop()
trên một mảng, một thành phần ở cuối mảng sẽ được xóa khỏi mảng.
const salad = ['🍅', '🍄', '🥦', '🥒', '🌽', '🥕', '🥑'];
salad.pop(); // 🥑
Logger.log(salad); // ['🍅', '🍄', '🥦', '🥒', '🌽', '🥕']
Để xóa một thành phần ở index = 0 của một mảng, bạn có thể dùng phương thức shift()
như sau:
const salad = ['🍅', '🍄', '🥦', '🥒', '🌽', '🥕', '🥑'];
salad.shift(); // 🍅
Logger.log(salad); // ['🍄', '🥦', '🥒', '🌽', '🥕', '🥑'];
Để kiểm tra xem một giá trị có phải là một mảng không trong Google Apps Script, bạn có thể sử dụng phương thức isArray như sau:
Array.isArray(['🍅', '🍄', '🥦', '🥒', '🌽', '🥕', '🥑']); // returns true
Array.isArray('🍅'); // returns false
Array.isArray({ 'tomato': '🍅'}); // returns false
Array.isArray([]); // returns true
Ở đây, xin phép các bạn mình sẽ không dịch từ destructuring trong tiếng Anh ra. Bạn có thể hiểu như sau, với destructuring trong GAS, bạn có thể khai báo biến nhanh hơn, ví dụ như sau:
let [tomato, mushroom, carrot] = ['🍅', '🍄', '🥕'];
đoạn này sẽ tương đương với việc khai báo 3 dòng như sau:
let vegetables = ['🍅', '🍄', '🥕'];
let tomato = vegetables[0];
let mushroom= vegetables[1];
let carrot= vegetables[2];
Như vậy Array destructuring sẽ giúp bạn viết code nhanh hơn, ngắn hơn, dễ nhìn hơn.
Bạn có thể sử dụng Array destructuring kết hợp với việc khai báo giá trị mặc định cho thành phần trong mảng như sau
let [tomato , mushroom = '🍄'] = ['🍅'];
Logger.log(tomato); // '🍅'
Logger.log(mushroom ); // '🍄'
Giá trị có thể được bỏ qua khi dùng Array Destructuring
let [tomato, , carrot] = ['🍅', '🍄', '🥕'];
Logger.log(tomato); // '🍅'
Logger.log(carrot); // '🥕'
Để nối hai mảng thành một mảng, bạn có thể dùng phương thức concat()
như sau:
const first = [1, 2, 3];
const second = [4, 5, 6];
const merged = first.concat(second);
Logger.log(merged); // [1, 2, 3, 4, 5, 6]
Để nối các thành phần trong mảng thành một chuỗi ngăn cách bởi dấu phẩy hoặc ký tự khác, chúng ta sẽ làm như sau:
const emotions = ['🙂', '😍', '🙄', '😟'];
const joined = emotions.join();
Logger.log(joined); // "🙂,😍,🙄,😟"
Nếu các bạn sử dụng join()
mặc định thì các thành phần sẽ được nối với nhau bằng dấu “,”. Để đổi từ dấu phẩy thành ký tự khác, thì các bạn có thể gọi phương thức join("#")
– sử dụng ký tự khác ở trong tham số của join()
Thậm chí, bạn có thể ngăn cách các thành phần trong mảng bằng chuỗi ký tự như sau:
const joined = emotions.join('<=>');
console.log(joined); // "🙂<=>😍<=>🙄<=>😟"
Để kiểm tra sự tồn tại của một thành phần trong mảng, chúng ta có thể sử dụng includes()
const names = ['tom', 'alex', 'bob', 'john'];
Logger.log(names.includes('tom')); // returns true
Logger.log(names.includes('july')); // returns false
Để tìm vị trí xuất hiện của một thành phần trong mảng, chúng ta có thể sử dụng phương thức indexOf(). Nếu thành phần có tồn tại trong mảng, thì vị trí đầu tiên sẽ được trả về (index đầu tiên), nếu thành phần không có trong mảng thì kết quả sẽ là -1
const names = ['tom', 'alex', 'bob', 'john'];
Logger.log(names.indexOf('alex')); // returns 1
Logger.log(names.indexOf('rob')); // returns -1
Một phương thức nữa chúng ta có thể sử dụng là tìm vị trí cuối cùng mà một thành phần xuất hiện trong mảng – lastIndexOf()
Cũng giống như indexOf(), nếu thành phần không được tìm thấy, kết quả trả về sẽ là -1
const names = ['tom', 'alex', 'bob', 'tom'];
Logger.log(names.indexOf('tom')); // returns 0
Logger.log(names.lastIndexOf('tom')); // returns 3
Để đảo ngược vị trí thứ tự các thành phần trong một mảng, bạn có thể sử dụng hàm reverse()
như sau
const names = ['tom', 'alex', 'bob'];
Logger.log(names.reverse()); // returns ["bob", "alex", "tom"]
Để sắp xếp các thành phần trong một mảng, bạn có thể sử dụng phương thức sort()
như sau:
const names = ['tom', 'alex', 'bob'];
names.sort(); // returns ["alex", "bob", "tom"]
Như vậy, trong bài này, Thanh đã giới thiệu tới các bạn một số kiến thức về mảng trong Google Apps Script. Để tìm hiểu sâu hơn về ứng dụng của những kiến thức này, các bạn có thể tham khảo khóa học Google Apps Script cơ bản của Thanh.