Nội dung bài viết
Video học lập trình mỗi ngày
Firebase giờ đây đã trở nên phổ biến trong việc realtime, hoặc cũng có thể sự dụng để làm cache cho chính dữ liệu của mỗi ứng dụng. Chính vì thế, việc storage trên firebase cũng trở nên quan trọng, và vì thế đôi lúc khiến những devjs trở lên lúng túng. Như trường hợp sau đây.
Yêu cầu
- Đã từng sử dụng firebase lưu dữ liệu
Save array of object với firebase
Nếu bạn tò mò về firebase thì tôi cũng hoan nghênh, vì vậy bạn có thể xem lại về những bài viết về Firebase, ở đó sẽ hướng dẫn đầy đủ chi tiết về cách thiết lập một Firebase. Tình cờ tôi phát hiện trên stackoverflow có hỏi về liên quan đến vấn đề này, và tôi cũng từng là một nạn nhân của việc này. Hãy xem nó liên quan như thế nào?
const arr = [ { "APPROVER" : "TOM@MAIL.COM", "JOB DESCRIPTION " : "CLEAN THE HOUSE", "JOB NUMBER" : "J251525" }, { "APPROVER" : "JAMES@MAIL.COM", "JOB DESCRIPTION " : "BRUSH HORSE", "JOB NUMBER" : "J512912" }, { "APPROVER" : "HARRY@MAIL.COM", "JOB DESCRIPTION " : "WASH CAR", "JOB NUMBER" : "J5-512" } ] this.database().set(arr);
Nếu bạn không xử lý về object này thì khi bạn set lên firebase thì sẽ có kết quả thế này
Nếu bạn nào làm quen về firebase sẽ để ý thấy rằng, key của những item trong Array đưa lên firebase là lần lượt là index của Array. Cũng chính vì lẽ đó, bạn sẽ không thể find được child() nếu bạn không biết được INDEX của chúng. Ví dụ:
this.database().child(INDEX).once('value', snapshot() => { //get snapshot.val(); })
Chính vì vậy, điều bạn cần nhất thì phải convert array thành object key - value. Và chúng ta sử dụng reduce method.
Reduce javascript
Hehe, lại là dùng reduce javascript, bạn thấy đấy reduce method được sử dụng rất rộng rãi, điều đó cho thấy bạn cần phải hiểu và vận dụng reduce nhiều hơn. Nếu vậy thì hãy xem qua những bài viết về "reduce method javascript"
const arr = [ { "APPROVER" : "TOMMAILCOM", "JOB DESCRIPTION " : "CLEAN THE HOUSE", "JOB NUMBER" : "J251525" }, { "APPROVER" : "JAMESMAILCOM", "JOB DESCRIPTION " : "BRUSH HORSE", "JOB NUMBER" : "J512912" }, { "APPROVER" : "HARRYMAILCOM", "JOB DESCRIPTION " : "WASH CAR", "JOB NUMBER" : "J5-512" } ] const arrayToObject = (arr) => arr.reduce((obj, item) => { obj[item.APPROVER] = item; return obj }, {}) let a = arrayToObject(arr) this.database().set(arrayToObject(arr))
Kết qủa như hình dưới đây.
Và từ đó chỉ cần là chúng ta lấy được một kết quả ngon lành.
this.database().child(EMAIL).once('value', snapshot() => { //get snapshot.val(); })
Lời kết
Firebase, càng ngày sử dụng chúng, tôi càng thấy nó rất hay và hiệu quả hơn hẳn. Có thể thay thế socket.io về realtime, có thể thay redis về cache. Và điều quan trọng , support toàn bộ từ wep đến iOS và android.