Làm cách nào để lặp mảng bên trong đối tượng trong JavaScript?

Phương thức

name - John
age - 20
hobbies - ["reading", "games", "coding"]
2 trả về một mảng gồm các cặp khóa/giá trị của đối tượng đã cho. Vòng lặp
name - John
age - 20
hobbies - ["reading", "games", "coding"]
3 được sử dụng để lặp qua một mảng

Câu lệnh for...in lặp lại trên tất cả các thuộc tính chuỗi có thể đếm được của một đối tượng (bỏ qua các thuộc tính được khóa bởi các ký hiệu), bao gồm các thuộc tính có thể đếm được kế thừa

for (variable in object)
  statement

variable

Nhận một tên thuộc tính chuỗi trên mỗi lần lặp. Có thể là một tuyên bố với const, let, hoặc var, hoặc một mục tiêu chuyển nhượng (e. g. một biến được khai báo trước đó hoặc một thuộc tính đối tượng)

object

Đối tượng có thuộc tính đếm được không phải là biểu tượng được lặp lại

statement

Một câu lệnh sẽ được thực hiện trên mỗi lần lặp. Có thể tham khảo variable. Bạn có thể sử dụng một câu lệnh khối để thực thi nhiều câu lệnh

Vòng lặp sẽ lặp qua tất cả vô số thuộc tính của chính đối tượng và những thuộc tính mà đối tượng kế thừa từ chuỗi nguyên mẫu của nó (thuộc tính của các nguyên mẫu gần hơn được ưu tiên hơn các thuộc tính của các nguyên mẫu xa đối tượng hơn trong chuỗi nguyên mẫu của nó)

Vòng lặp for...in chỉ lặp qua vô số thuộc tính không phải ký hiệu. Các đối tượng được tạo từ các hàm tạo dựng sẵn như

const obj = { a: 1, b: 2, c: 3 };

for (const prop in obj) {
  console.log(`obj.${prop} = ${obj[prop]}`);
}

// Logs:
// "obj.a = 1"
// "obj.b = 2"
// "obj.c = 3"
2 và
const obj = { a: 1, b: 2, c: 3 };

for (const prop in obj) {
  console.log(`obj.${prop} = ${obj[prop]}`);
}

// Logs:
// "obj.a = 1"
// "obj.b = 2"
// "obj.c = 3"
3 đã kế thừa các thuộc tính không thể đếm được từ
const obj = { a: 1, b: 2, c: 3 };

for (const prop in obj) {
  console.log(`obj.${prop} = ${obj[prop]}`);
}

// Logs:
// "obj.a = 1"
// "obj.b = 2"
// "obj.c = 3"
4 và
const obj = { a: 1, b: 2, c: 3 };

for (const prop in obj) {
  console.log(`obj.${prop} = ${obj[prop]}`);
}

// Logs:
// "obj.a = 1"
// "obj.b = 2"
// "obj.c = 3"
5, chẳng hạn như phương thức
const obj = { a: 1, b: 2, c: 3 };

for (const prop in obj) {
  console.log(`obj.${prop} = ${obj[prop]}`);
}

// Logs:
// "obj.a = 1"
// "obj.b = 2"
// "obj.c = 3"
7 của
const obj = { a: 1, b: 2, c: 3 };

for (const prop in obj) {
  console.log(`obj.${prop} = ${obj[prop]}`);
}

// Logs:
// "obj.a = 1"
// "obj.b = 2"
// "obj.c = 3"
2 hoặc phương thức
const obj = { a: 1, b: 2, c: 3 };

for (const prop in obj) {
  console.log(`obj.${prop} = ${obj[prop]}`);
}

// Logs:
// "obj.a = 1"
// "obj.b = 2"
// "obj.c = 3"
9 của
const obj = { a: 1, b: 2, c: 3 };

for (const prop in obj) {
  console.log(`obj.${prop} = ${obj[prop]}`);
}

// Logs:
// "obj.a = 1"
// "obj.b = 2"
// "obj.c = 3"
3, sẽ không được truy cập trong vòng lặp for...in

Thứ tự truyền tải, theo đặc tả ECMAScript hiện đại, được xác định rõ ràng và nhất quán trong quá trình triển khai. Trong mỗi thành phần của chuỗi nguyên mẫu, tất cả các khóa số nguyên không âm (những khóa có thể là chỉ số mảng) sẽ được duyệt trước theo thứ tự tăng dần theo giá trị, sau đó là các khóa chuỗi khác theo thứ tự thời gian tăng dần của việc tạo thuộc tính

Phần variable của for...in chấp nhận mọi thứ có thể đến trước toán tử

const triangle = { a: 1, b: 2, c: 3 };

function ColoredTriangle() {
  this.color = "red";
}

ColoredTriangle.prototype = triangle;

const obj = new ColoredTriangle();

for (const prop in obj) {
  if (Object.hasOwn(obj, prop)) {
    console.log(`obj.${prop} = ${obj[prop]}`);
  }
}

// Logs:
// "obj.color = red"
3. Bạn có thể sử dụng const để khai báo biến miễn là nó không được gán lại trong thân vòng lặp (nó có thể thay đổi giữa các lần lặp, vì đó là hai biến riêng biệt). Nếu không, bạn có thể sử dụng let. Bạn cũng có thể sử dụng hàm hủy hoặc thuộc tính đối tượng như
const triangle = { a: 1, b: 2, c: 3 };

function ColoredTriangle() {
  this.color = "red";
}

ColoredTriangle.prototype = triangle;

const obj = new ColoredTriangle();

for (const prop in obj) {
  if (Object.hasOwn(obj, prop)) {
    console.log(`obj.${prop} = ${obj[prop]}`);
  }
}

// Logs:
// "obj.color = red"
6

A cho phép các khai báo var của biến vòng lặp có bộ khởi tạo. Điều này gây ra lỗi cú pháp ở chế độ nghiêm ngặt và bị bỏ qua ở chế độ không nghiêm ngặt

Nếu một thuộc tính được sửa đổi trong một lần lặp và sau đó được truy cập sau đó, giá trị của nó trong vòng lặp là giá trị của nó tại thời điểm sau đó. Thuộc tính bị xóa trước khi nó được truy cập sẽ không được truy cập sau. Các thuộc tính được thêm vào đối tượng mà quá trình lặp đang diễn ra có thể được truy cập hoặc bỏ qua khỏi quá trình lặp

Nói chung, tốt nhất là không thêm, sửa đổi hoặc xóa các thuộc tính khỏi đối tượng trong quá trình lặp lại, ngoài thuộc tính hiện đang được truy cập. Không có gì đảm bảo liệu một thuộc tính được thêm vào sẽ được truy cập hay không, liệu một thuộc tính đã sửa đổi (không phải thuộc tính hiện tại) sẽ được truy cập trước hay sau khi nó được sửa đổi hay liệu một thuộc tính đã xóa sẽ được truy cập trước khi nó bị xóa

Các chỉ mục mảng chỉ là các thuộc tính có thể đếm được với tên số nguyên và giống hệt với các thuộc tính đối tượng chung. Vòng lặp for...in sẽ duyệt qua tất cả các khóa số nguyên trước khi duyệt qua các khóa khác và theo thứ tự tăng dần nghiêm ngặt, làm cho hành vi của for...in gần với phép lặp mảng bình thường. Tuy nhiên, vòng lặp for...in sẽ trả về tất cả các thuộc tính có thể đếm được, bao gồm cả những thuộc tính có tên không phải là số nguyên và những thuộc tính được kế thừa. Không giống như for...in1, for...in sử dụng phép liệt kê thuộc tính thay vì trình vòng lặp của mảng. Trong , for...in1 sẽ truy cập vào các ô trống, nhưng for...in sẽ không

Tốt hơn là sử dụng vòng lặp for...in5 có chỉ số, for...in6 hoặc vòng lặp for...in1, vì chúng sẽ trả về chỉ mục dưới dạng số thay vì chuỗi và cũng tránh các thuộc tính không có chỉ mục

Nếu bạn chỉ muốn xem xét các thuộc tính gắn liền với chính đối tượng chứ không phải nguyên mẫu của nó, bạn có thể sử dụng một trong các kỹ thuật sau

  • for...in8
  • for...in9

variable0 sẽ trả về một danh sách các thuộc tính chuỗi riêng có thể đếm được, trong khi variable1 cũng sẽ chứa các thuộc tính không thể đếm được

Nhiều hướng dẫn và trình hướng dẫn về phong cách JavaScript khuyên không nên sử dụng for...in, bởi vì nó lặp lại trên toàn bộ chuỗi nguyên mẫu, điều hiếm khi người ta muốn và có thể gây nhầm lẫn với vòng lặp for...in1 được sử dụng rộng rãi hơn. for...in được sử dụng thực tế nhất cho mục đích gỡ lỗi, là một cách dễ dàng để kiểm tra các thuộc tính của một đối tượng (bằng cách xuất ra bàn điều khiển hoặc cách khác). Trong trường hợp các đối tượng được sử dụng làm cặp khóa-giá trị đặc biệt, for...in cho phép bạn kiểm tra xem có bất kỳ khóa nào trong số đó giữ một giá trị cụ thể không

Vòng lặp for...in bên dưới lặp lại trên tất cả các thuộc tính không phải ký hiệu, có thể đếm được của đối tượng và ghi lại một chuỗi tên thuộc tính và giá trị của chúng

const obj = { a: 1, b: 2, c: 3 };

for (const prop in obj) {
  console.log(`obj.${prop} = ${obj[prop]}`);
}

// Logs:
// "obj.a = 1"
// "obj.b = 2"
// "obj.c = 3"

Hàm sau minh họa việc sử dụng variable7. các thuộc tính kế thừa không được hiển thị

Làm cách nào để lặp lại mảng bên trong các đối tượng trong JavaScript?

Để lặp qua một mảng đối tượng trong JavaScript, bạn có thể sử dụng phương thức forEach() cùng với phương thức for. trong vòng lặp . Vòng lặp forEach() bên ngoài được sử dụng để lặp qua mảng đối tượng. Sau đó chúng tôi sử dụng cho. trong vòng lặp để lặp qua các thuộc tính của một đối tượng riêng lẻ.

Làm cách nào để lặp qua đối tượng trong JavaScript?

Các phương thức lặp qua các đối tượng bằng javascript .
vì. trong vòng lặp. Cách đơn giản nhất để lặp qua các thuộc tính của đối tượng là sử dụng lệnh for. trong tuyên bố. .
keys() Phương thức. Trước ES6, cách duy nhất để lặp qua một đối tượng là sử dụng lệnh for. trong vòng lặp. .
phương thức value(). đối tượng. .
các mục () Phương thức

Vòng lặp nào được sử dụng cho mảng đối tượng?

Vòng lặp for có thể được sử dụng để truy cập mọi phần tử của mảng. Mảng bắt đầu từ 0 và độ dài thuộc tính mảng được sử dụng để đặt kết thúc vòng lặp.

Bạn có thể lặp qua một mảng trong JavaScript không?

Nếu chúng ta muốn lặp qua một mảng, chúng ta có thể sử dụng thuộc tính độ dài để chỉ định rằng vòng lặp sẽ tiếp tục cho đến khi chúng ta đến phần tử cuối cùng của mảng. In the loop above, we first initialized the index number so that it begins with 0 .