Trung Quân
  • Node.js
  • ReactJS
    • Learn React Hooks
  • MERN Stack
  • Thuật Toán
  • Công Nghệ
    • Amazon AWS
    • Hosting – Domain
  • Về Tác Giả
  • Bản Quyền
Top Posts
Lộ trình học lập trình Web từ con...
Nhận diện, xác thực khuôn mặt với ReactJS...
Tạo hiệu ứng thẻ bài Magic với HTML...
NodeJS viết API gửi Email với OAuth2 và...
Tạo hiệu ứng Parallax đơn giản chỉ với...
Git – GitHub • Học Git thực tế...
Tạo một trang GitHub Profile phiên bản vũ...
Cài đặt iTerm2, Oh My Zsh, Zsh-autosuggestions và...
Cài đặt NVM, NodeJS và GIT trên MacOS...
Thuật toán Tìm phần tử bị lặp đầu...

Trung Quân

  • Node.js
  • ReactJS
    • Learn React Hooks
  • MERN Stack
  • Thuật Toán
  • Công Nghệ
    • Amazon AWS
    • Hosting – Domain
  • Về Tác Giả
  • Bản Quyền
JavascriptNode.js

Hướng dẫn Loop through Object trong Javascript ES6

by trungquandev December 25, 2019
written by trungquandev December 25, 2019
loop-through-object-in-javascript-es6-trungquandev

Xin chào tất cả các bạn, mình là Quân, hôm nay chúng ta sẽ cùng nhau đi tìm hiểu những cách khác nhau phục vụ cho công việc lặp đối tượng trong javascript hay nói tiếng anh dễ hiểu hơn là Loop Through Object trong Javascript nhé.

“Bài này nằm trong loạt bài Kỹ thuật xử lý Javascript nâng cao (đang cập nhật) trên trang blog chính thức trungquandev.com“

Những nội dung có trong bài:

  1. Loop through object – Chỉ có một gạch đầu dòng này thôi, và nó sẽ chứa rất nhiều kỹ thuật bên trong, các bạn kéo xuống đọc tiếp nhé =))

1. Loop through object – lặp đối tượng trong Javascript

Mình sẽ lần lượt ví dụ triển khai theo 5 cách dưới đây, trong quá trình đi làm thực tế tùy vào những trường hợp yêu cầu khác nhau mà chúng ta sẽ sử dụng từng cách để xử lý dữ liệu sao cho phù hợp nhất.

* for…in loop


for…in – giúp chúng ta lấy key của object trong mỗi lần lặp và có thể sử dụng key đó để lấy value của object.

const object1 = {
  id: 17,
  name: 'trungquan',
  website: 'https://trungquandev.com'
}

for (let key in object1) {
  if (object1.hasOwnProperty(key)) {
  	console.log(`${key}: ${object1[key]}`)
  }
}

// expected output:
// 'id: 17'
// 'name: trungquan'
// 'website: https://trungquandev.com'
//
  • Một lưu ý nhỏ là ở trong đoạn code trên mình có sử dụng phương thức hasOwnProperty để kiểm tra cái key nhận được có thuộc về object1 ban đầu hay không, bởi vì nếu không kiểm tra như vậy thì vòng lặp for…in sẽ lặp qua cả object prototype chain.

* Object.keys


Object.keys() sẽ nhận object của chúng ta làm tham số và trả về kết quả là một mảng (array) chứa tất cả các key của object.

const object1 = {
  id: 17,
  name: 'trungquan',
  website: 'https://trungquandev.com'
}

console.log(Object.keys(object1))
// expected output: ["id", "name", "website"]

Object.keys(object1).forEach(key => {
  console.log(`${key}: ${object1[key]}`)
})
// expected output:
// 'id: 17'
// 'name: trungquan'
// 'website: https://trungquandev.com'
//
  • Ngoài ra ở trong đoạn code trên, sau khi đã lấy được một array chứa các key của object1 bằng Object.keys, mình tiếp tục sử dụng forEach để duyệt qua array đó và log ra key – value của object1 như trong ví dụ for…in ở trên nhé.

* Object.values


Object.values() sẽ nhận object của chúng ta làm tham số và trả về kết quả là một mảng (array) chứa tất cả value của object.
– Sử dụng Object.values trong những trường hợp mà chúng ta không cần quan tâm đến key của object, mà chỉ cần lấy value thôi.

const object1 = {
  id: 17,
  name: 'trungquan',
  website: 'https://trungquandev.com'
}

console.log(Object.values(object1))
// expected output: [17, "trungquan", "https://trungquandev.com"]

Object.values(object1).forEach(value => {
  console.log(value)
})
// expected output:
// 17
// 'trungquan'
// 'https://trungquandev.com'
//

* Object.entries


Object.entries() sẽ nhận object của chúng ta làm tham số và trả về một array mà bên trong đó lại tiếp tục là các array nhỏ hơn chứa các cặp key, value của object.

const object1 = {
  id: 17,
  name: 'trungquan',
  website: 'https://trungquandev.com'
}
console.log(Object.entries(object1))
// expected output: [["id", 17], ["name", "trungquan"], ["website", "https://trungquandev.com"]]

Object.entries(object1).forEach(([key, value]) => {
    console.log(`${key}: ${value}`)
})

// expected output:
// 'id: 17'
// 'name: trungquan'
// 'website: https://trungquandev.com'
//
  • Ở trong đoạn code trên mình tiếp tục sử dụng forEach sau khi đã có [key, value] của object1 lấy được từ Object.entries và log chúng ra cho các bạn thấy.
  • Cũng có thể nói thằng Object.entries này là phương thức tổng hợp của Object.keys và Object.values ở trên vì nó lấy ra cùng lúc cả 2 giá trị key, value chứ không lấy riêng lẻ như từng thằng kia.

* Object.getOwnPropertyNames


Object.getOwnPropertyNames() sẽ nhận object của chúng ta làm tham số và trả về một array chứa các property hoặc key (bao gồm cả thuộc tích non-enumberable) của object.

const object1 = {
  id: 17,
  name: 'trungquan',
  website: 'https://trungquandev.com'
}

console.log(Object.getOwnPropertyNames(object1))
// expected output: ["id", "name", "website"]

Object.getOwnPropertyNames(object1).forEach(key => {
  console.log(`${key}: ${object1[key]}`)
})
// expected output:
// 'id: 17'
// 'name: trungquan'
// 'website: https://trungquandev.com'
//

* So sánh Object.getOwnPropertyNames với Object.keys

  • Thoạt nhìn rõ ràng các bạn có thể nhận thấy thằng Object.getOwnPropertyNames này và thằng Object.keys đều trả về chung một kết quả là mảng chứa các key, vậy lúc này chúng ta nên đặt ra câu hỏi để tìm hiểu sâu hơn đó là: Giữa chúng nó có điểm gì khác nhau?
  • Câu trả lời mình tìm hiểu được thì giữa chúng khác nhau ở một thứ là enumerable – Chỉ định xem thuộc tính liệu có được trả về trong vòng lặp hay không?
  • Đối với thuộc tính mà chúng ta set enumerable là false thì Object.keys sẽ không lấy ra được giá trị, ngược lại, getOwnPropertyNames vẫn sẽ lấy ra được hết. Ví dụ cụ thể:
let object1 = {}
Object.defineProperties(object1, {
    id: {enumerable: true, value: '17'},
    name: {enumerable: false, value: 'trungquandev'},
    website: {enumerable: false, value: 'https://trungquandev.com'}
})

console.log(Object.keys(object1)) // ["id"]
console.log(Object.getOwnPropertyNames(object1)) // ["id", "name", "website"]
//

Chốt lại, chúng ta đã cùng nhau đi thử 5 cách khác nhau cho việc triển khai lặp một đối tượng trong javascript – loop through object in javascript.
Trong quá trình đi làm dự án thực tế, sẽ tùy vào từng trường hợp triển khai object mà các bạn sẽ chọn cho mình một hoặc nhiều cách sao cho phù hợp nhé.


Cảm ơn các bạn đã dành thời gian đọc bài viết.

Xin chào và hẹn gặp lại các bạn ở những bài viết tiếp theo.

Best Regards – Trung Quân – Green Cat


Tham khảo kiến thức:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object
https://dev.to/saigowthamr/how-to-loop-through-object-in-javascript-es6-3d26
https://stackoverflow.com/a/22658584

“Thanks for awesome knowledges.”

Khóa học lập trình làm việc thực tế:

Nếu các bạn thấy bài viết của mình có ích thì hãy ủng hộ mình bằng cách tham khảo bài viết giới thiệu khóa học lập trình MERN Stack Miễn Phí cực kỳ chất lượng và chính chủ dưới đây của mình nhé, cảm ơn các bạn ^^
KHOÁ HỌC LẬP TRÌNH MERN STACK 100% DỰ ÁN THỰC TẾ và CHẤT LƯỢNG
mern-stack-course-trungquandev
forjavascriptloopobjectobject.entriesobject.hasOwnPropertyNamesobject.keysobject.valuestrungquandev
0 comment
2
FacebookTwitterGoogle +Pinterest
trungquandev

previous post
NodeJS xác thực người dùng sử dụng JWT (Access Token, Refresh Token)
next post
Gửi nhận email trong NodeJS cực kỳ đơn giản với nodemailer

Related Posts

Xây dựng ứng dụng “động vật ẩn danh”...

January 15, 2018

Node.js & MongoDB – Xây dựng một ứng...

May 26, 2019

Đào sâu một chút về module Events trong...

September 30, 2018

Cấu hình Babel cho một dự án Node.JS...

April 29, 2021

Node.js – Cài đặt môi trường phát triển...

May 23, 2018

Tìm hiểu 3 Modules Built-in trong Node.js: HTTP...

July 23, 2018

Một cái nhìn tổng quan nhất về Node.js

April 8, 2018

“Module” trong Node.js, khái niệm và thực tiễn.

June 19, 2018

Hướng dẫn sử dụng ES Modules – cú...

August 17, 2020

Upload multiple files trong NodeJS

August 18, 2019

Bát Chánh Đạo

batchanhdao-trungquandev

About Me

About Me

Trung Quân

Software Engineer at Pod Foods

Academy Of Cryptography Techniques

"I am a dog and cat lover, love green, love to read books, write blog and oil painting ..."

Read my CV → https://cv.trungquandev.com/

My Maxim Live

A bit of fragrance clings to the hand that gives flowers!

For Vietnamese young generation

Đừng bao giờ làm người khổng lồ trong tư tưởng nhưng chỉ là thằng lùn trong hành động.

Keep in touch

Facebook Instagram Linkedin Youtube Email Github

Fanpage Facebook

Facebook

Học lập trình “MERN Stack Cơ Bản” qua ứng dụng thực tế

mern-stack-trello-app-trungquandev


  Khóa học lập trình MERN Stack (NodeJS, ReactJS, ExpressJS, MongoDB) cực kỳ chất lượng và Miễn Phí do chính mình hướng dẫn nhé:
  MERN Stack - xây dựng ứng dụng quản lý công việc dạng Kanban tương tự Trello.

Học lập trình “MERN Stack Nâng Cao” qua ứng dụng thực tế

mern-stack-advanced-trello-app-trungquandev


  * Học lập trình MERN Stack Nâng Cao (NodeJS, ReactJS, ExpressJS, MongoDB). Đây là một khóa học mà mình đã làm cực kỳ tâm huyết, với phong cách dạy lập trình làm dự án thực tế, chuyên nghiệp. Để các bạn có một hành trang kiến thức vững chắc cho hành trình làm lập trình viên trong tương lai nhé.
  Lập Trình MERN Stack Nâng Cao - Học Thực Tế Để Đi Làm

YouTube: Trungquandev Official

youtube-channel-trungquandev-official


  - Các bạn tham khảo kênh YouTube chính thức của mình và ủng hộ mình bằng cách tặng mình một lượt Đăng Ký Kênh nha.
Cảm ơn các bạn ^^

  YouTube: TRUNGQUANDEV OFFICIAL

© Copyright

Bản quyền:
  © DMCA (Digital Millennium Copyright Act)


DMCA.com Protection Status

License

Giấy phép nội dung:
  Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 Quốc tế.


Giấy phép Creative Commons

Other links

Portfolio của mình:
  https://cv.trungquandev.com

Lập trình cuộc sống:
  https://laptrinhcuocsong.com

Nhiều bài viết hay về javascript:
  https://codetheworld.io

  • Facebook
  • Youtube
  • GitHub
  • Linkedin
  • Instagram

@2022 - trungquandev.com. Since 2016 - All Right Reserved. Developed by Trung Quân Dev