Mảng trả về vòng lặp JavaScript

JavaScript cung cấp một số phương thức và kỹ thuật để lặp qua các mảng và phần tử và thực hiện mọi việc với chúng. Vậy… bạn nên sử dụng phương pháp nào và tại sao?

Hôm nay, chúng ta sẽ xem xét các cách khác nhau mà bạn có thể lặp lại mọi thứ với vanilla JS, khi nào và tại sao nên chọn cái này thay vì cái kia

Nào cùng đào vào bên trong

Một mảng ví dụ

Đối với bài viết hôm nay, hãy sử dụng một mảng sandwiches làm ví dụ

let sandwiches = ['turkey', 'tuna', 'ham', 'pb&j'];

Chúng tôi sẽ lặp lại nó và ghi từng mục vào bảng điều khiển, nhưng trong một trang web hoặc ứng dụng thực, bạn có thể muốn thao tác dữ liệu theo một cách nào đó

Vòng lặp for

Bạn có thể sử dụng vòng lặp for để lặp qua các mảng, NodeList và các đối tượng giống như mảng khác. Đây là cách học cũ để lặp lại mọi thứ

// logs 0, "turkey", 1, "tuna", 2, "ham", 3, "pb&j"
for (let i = 0; i < sandwiches.length; i++) {
	console.log(i); // index
	console.log(sandwiches[i]); // value
}

  • Trong phần đầu tiên của vòng lặp, trước dấu chấm phẩy đầu tiên, chúng ta đặt một biến đếm (thường là ________ 38 ______, nhưng nó có thể là bất kỳ thứ gì) thành
    // logs 0, "turkey", 1, "tuna", 2, "ham", 3, "pb&j"
    for (let i = 0; i < sandwiches.length; i++) {
    	console.log(i); // index
    	console.log(sandwiches[i]); // value
    }
    
    0
  • Phần thứ hai, giữa hai dấu chấm phẩy, là bài kiểm tra mà chúng tôi kiểm tra sau mỗi lần lặp lại vòng lặp. Trong trường hợp này, chúng tôi muốn đảm bảo giá trị bộ đếm nhỏ hơn tổng số mục trong mảng của chúng tôi. Chúng tôi làm điều này bằng cách kiểm tra
    // logs 0, "turkey", 1, "tuna", 2, "ham", 3, "pb&j"
    for (let i = 0; i < sandwiches.length; i++) {
    	console.log(i); // index
    	console.log(sandwiches[i]); // value
    }
    
    1 của mảng của chúng tôi
  • Cuối cùng, sau dấu chấm phẩy thứ hai, chúng tôi chỉ định những gì sẽ chạy sau mỗi vòng lặp. Trong trường hợp này, chúng tôi đang thêm
    // logs 0, "turkey", 1, "tuna", 2, "ham", 3, "pb&j"
    for (let i = 0; i < sandwiches.length; i++) {
    	console.log(i); // index
    	console.log(sandwiches[i]); // value
    }
    
    2 vào giá trị của i với
    // logs 0, "turkey", 1, "tuna", 2, "ham", 3, "pb&j"
    for (let i = 0; i < sandwiches.length; i++) {
    	console.log(i); // index
    	console.log(sandwiches[i]); // value
    }
    
    4

Sau đó, chúng tôi có thể sử dụng _______ 38 _______ để lấy mục hiện tại trong vòng lặp từ mảng của chúng tôi

Đây là một bản demo

Vòng lặp // logs 0, "turkey", 1, "tuna", 2, "ham", 3, "pb&j" for (let i = 0; i < sandwiches.length; i++) { console.log(i); // index console.log(sandwiches[i]); // value } 6

Một cách tiếp cận hiện đại hơn, bạn có thể sử dụng

// logs 0, "turkey", 1, "tuna", 2, "ham", 3, "pb&j"
for (let i = 0; i < sandwiches.length; i++) {
	console.log(i); // index
	console.log(sandwiches[i]); // value
}
6 để lặp qua các đối tượng có thể lặp lại. Điều đó bao gồm các chuỗi, mảng và các đối tượng giống như mảng khác như NodeLists, HTMLCollections và HTMLFormControlsCollection, nhưng không phải là các đối tượng đơn giản (
// logs 0, "turkey", 1, "tuna", 2, "ham", 3, "pb&j"
for (let i = 0; i < sandwiches.length; i++) {
	console.log(i); // index
	console.log(sandwiches[i]); // value
}
8)

Trong một vòng lặp

// logs 0, "turkey", 1, "tuna", 2, "ham", 3, "pb&j"
for (let i = 0; i < sandwiches.length; i++) {
	console.log(i); // index
	console.log(sandwiches[i]); // value
}
6, bạn xác định một biến để đại diện cho mục hiện tại
// logs "turkey", "tuna", "ham", "pb&j"
for (let sandwich of sandwiches) {
	console.log(sandwich);
}
0 có thể lặp lại mà bạn đang lặp lại. Bên trong khối (phần nằm giữa dấu ngoặc nhọn), bạn có thể sử dụng biến đó để tham chiếu mục hiện tại

// logs "turkey", "tuna", "ham", "pb&j"
for (let sandwich of sandwiches) {
	console.log(sandwich);
}

Đây là một bản demo khác

Bỏ qua và kết thúc vòng lặp

Bạn có thể chuyển sang mục tiếp theo trong vòng lặp for hoặc

// logs 0, "turkey", 1, "tuna", 2, "ham", 3, "pb&j"
for (let i = 0; i < sandwiches.length; i++) {
	console.log(i); // index
	console.log(sandwiches[i]); // value
}
6 bằng cách sử dụng
// logs "turkey", "tuna", "ham", "pb&j"
for (let sandwich of sandwiches) {
	console.log(sandwich);
}
3 hoặc kết thúc vòng lặp hoàn toàn bằng
// logs "turkey", "tuna", "ham", "pb&j"
for (let sandwich of sandwiches) {
	console.log(sandwich);
}
4

// logs "turkey", "tuna", "pb&j"
for (let sandwich of sandwiches) {

	// Skip to the next item in the loop
	if (sandwich === 'ham') continue;

	console.log(sandwich);

}

// Logs "turkey", "tuna"
for (let sandwich of sandwiches) {

	// Skip to the next item in the loop
	if (sandwich === 'ham') break;

	console.log(sandwich);

}

Đây là bản demo của

// logs "turkey", "tuna", "ham", "pb&j"
for (let sandwich of sandwiches) {
	console.log(sandwich);
}
3 và
// logs "turkey", "tuna", "ham", "pb&j"
for (let sandwich of sandwiches) {
	console.log(sandwich);
}
4

Các phương thức // logs "turkey", "tuna", "ham", "pb&j" for (let sandwich of sandwiches) { console.log(sandwich); } 7 và // logs "turkey", "tuna", "ham", "pb&j" for (let sandwich of sandwiches) { console.log(sandwich); } 8

Các phương thức

// logs "turkey", "tuna", "ham", "pb&j"
for (let sandwich of sandwiches) {
	console.log(sandwich);
}
7 và
// logs "turkey", "tuna", "ham", "pb&j"
for (let sandwich of sandwiches) {
	console.log(sandwich);
}
8 cung cấp một cách đơn giản hơn để lặp lại các mảng và NodeLists trong khi vẫn có quyền truy cập vào chỉ mục

Bạn chuyển một hàm gọi lại vào phương thức

// logs "turkey", "tuna", "pb&j"
for (let sandwich of sandwiches) {

	// Skip to the next item in the loop
	if (sandwich === 'ham') continue;

	console.log(sandwich);

}

// Logs "turkey", "tuna"
for (let sandwich of sandwiches) {

	// Skip to the next item in the loop
	if (sandwich === 'ham') break;

	console.log(sandwich);

}
1. Bản thân cuộc gọi lại chấp nhận ba đối số. mục hiện tại trong vòng lặp, chỉ mục của mục hiện tại trong vòng lặp và chính mảng đó. Cả ba đều là tùy chọn và bạn có thể đặt tên cho chúng theo bất cứ thứ gì bạn muốn

// logs 0, "turkey", 1, "tuna", 2, "ham", 3, "pb&j"
sandwiches.forEach(function (sandwich, index) {
	console.log(index);    // index
	console.log(sandwich); // value
});

Đây là bản demo của phương pháp

// logs "turkey", "tuna", "ham", "pb&j"
for (let sandwich of sandwiches) {
	console.log(sandwich);
}
7

Không giống như vòng lặp for

// logs 0, "turkey", 1, "tuna", 2, "ham", 3, "pb&j"
for (let i = 0; i < sandwiches.length; i++) {
	console.log(i); // index
	console.log(sandwiches[i]); // value
}
6, bạn không thể kết thúc hàm gọi lại
// logs "turkey", "tuna", "pb&j"
for (let sandwich of sandwiches) {

	// Skip to the next item in the loop
	if (sandwich === 'ham') continue;

	console.log(sandwich);

}

// Logs "turkey", "tuna"
for (let sandwich of sandwiches) {

	// Skip to the next item in the loop
	if (sandwich === 'ham') break;

	console.log(sandwich);

}
1 trước khi nó được lặp qua tất cả các mục. Bạn có thể
// logs "turkey", "tuna", "pb&j"
for (let sandwich of sandwiches) {

	// Skip to the next item in the loop
	if (sandwich === 'ham') continue;

	console.log(sandwich);

}

// Logs "turkey", "tuna"
for (let sandwich of sandwiches) {

	// Skip to the next item in the loop
	if (sandwich === 'ham') break;

	console.log(sandwich);

}
6 để kết thúc vòng lặp hiện tại (giống như bạn làm với
// logs "turkey", "tuna", "ham", "pb&j"
for (let sandwich of sandwiches) {
	console.log(sandwich);
}
3), nhưng không có cách nào để
// logs "turkey", "tuna", "ham", "pb&j"
for (let sandwich of sandwiches) {
	console.log(sandwich);
}
4 vòng lặp

// Skip "ham"
// logs "turkey", "tuna", "pb&j"
sandwiches.forEach(function (sandwich, index) {
	if (sandwich === 'ham') return;
	console.log(sandwich);
});

Đây là bản minh họa bỏ qua các mục trong vòng lặp

// logs "turkey", "tuna", "ham", "pb&j"
for (let sandwich of sandwiches) {
	console.log(sandwich);
}
7

Bạn nên sử dụng phương pháp nào, và tại sao?

Trong hầu hết các trường hợp, hầu hết thời gian, tôi sử dụng vòng lặp

// logs 0, "turkey", 1, "tuna", 2, "ham", 3, "pb&j"
for (let i = 0; i < sandwiches.length; i++) {
	console.log(i); // index
	console.log(sandwiches[i]); // value
}
6. Nó đơn giản và dễ hiểu, và dễ gõ

Tuy nhiên, có một số trường hợp ngoại lệ đối với điều đó…

  1. Nếu tôi cần chỉ mục của mặt hàng, tôi sẽ sử dụng phương pháp
    // logs "turkey", "tuna", "ham", "pb&j"
    for (let sandwich of sandwiches) {
    	console.log(sandwich);
    }
    
    7 hoặc
    // logs "turkey", "tuna", "ham", "pb&j"
    for (let sandwich of sandwiches) {
    	console.log(sandwich);
    }
    
    8
  2. Nếu tôi cần chỉ mục và muốn kết thúc vòng lặp sớm sau khi một điều kiện được đáp ứng, tôi sẽ sử dụng vòng lặp for

Tôi cố gắng tránh các vòng lặp for trừ khi có lý do thuyết phục để sử dụng chúng. Chúng khó đọc. Chúng khó viết. Họ chỉ là lộn xộn

Làm cách nào để trả về một mảng mới trong JavaScript vòng lặp for?

bộ lọc lặp qua một mảng và trả về một mảng mới chỉ có các phần tử trả về true trong hàm gọi lại. Ví dụ, để chỉ lấy các phần tử lớn hơn 0 trong mảng, bạn có thể làm theo cách này với vòng lặp for. const betterArr = []; .

Làm cách nào để lặp một mảng trong JavaScript?

Cách lặp qua một mảng bằng vòng lặp forEach trong JavaScript. Phương thức mảng forEach() lặp qua bất kỳ mảng nào, thực thi hàm được cung cấp một lần cho mỗi phần tử mảng theo thứ tự chỉ số tăng dần . Chức năng này được gọi là chức năng gọi lại.

Làm cách nào để trả về một giá trị mảng trong JavaScript?

Mảng Javascript . hàm values() là một hàm có sẵn trong JavaScript được sử dụng để trả về một đối tượng Iterator mảng mới chứa các giá trị cho từng chỉ mục trong mảng i. e, nó in ra tất cả các phần tử của mảng. Giá trị trả về. Nó trả về một đối tượng lặp mảng mới i. e, các phần tử của mảng đã cho.

Chúng ta có thể sử dụng JavaScript vòng lặp return in for không?

Có, khi câu lệnh return được thực thi, toàn bộ chức năng sẽ bị thoát tại thời điểm đó .