Як обійти двовимірний масив?
Обхід двовимірного масиву (або матриці) - одна з базових, але дуже важливих операцій у програмуванні. Оскільки це масив масивів, його потрібно обходити вкладеними циклами: зовнішній - по рядках, внутрішній - по стовпцях.
Приклад двовимірного масиву:
javascript
const matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];1. Класичний спосіб через for
javascript
for (let i = 0; i < matrix.length; i++) {
for (let j = 0; j < matrix[i].length; j++) {
console.log(`matrix[${i}][${j}] = ${matrix[i][j]}`);
}
}i- індекс рядка,j- індекс стовпця.matrix[i][j]- елемент у рядкуi, стовпціj.
Вивід:
javascript
matrix[0][0] = 1
matrix[0][1] = 2
...
matrix[2][2] = 92. Через for...of (зручніше і коротше)
javascript
for (const row of matrix) {
for (const value of row) {
console.log(value);
}
}- Зовнішній
for...ofпроходить по рядках, - Внутрішній - по елементах усередині рядка.
Найчитабельніший і найсучасніший спосіб обходу.
3. Через forEach()
javascript
matrix.forEach((row, i) => {
row.forEach((value, j) => {
console.log(`matrix[${i}][${j}] = ${value}`);
});
});- Не потребує індексів у класичному вигляді,
- Підходить для більш "функціонального" стилю,
- Але не можна перервати цикл через
breakабоreturn(на відміну відfor).
4. За допомогою flat() (якщо потрібно обійти всі елементи підряд)
javascript
matrix.flat().forEach(value => console.log(value));flat() перетворює двовимірний масив на звичайний одновимірний:
javascript
matrix.flat(); // [1, 2, 3, 4, 5, 6, 7, 8, 9]5. Через reduce() (для підрахунків)
Якщо потрібно, наприклад, підсумувати всі елементи:
javascript
const sum = matrix.reduce(
(acc, row) => acc + row.reduce((a, b) => a + b, 0),
0
);
console.log(sum); // 45Внутрішній reduce підсумовує рядок, зовнішній - все разом.
Коротко:
| Спосіб | Що робить | Чи можна перервати цикл |
|---|---|---|
for | Повний контроль, індекси | Так |
for...of | Простий і читабельний обхід | Так |
forEach() | Функціональний стиль | Ні |
flat() + forEach() | Обхід усіх значень як одновимірного масиву | Ні |
reduce() | Агрегація (наприклад, сума) | Так (логічно) |
Підсумок: Для обходу двовимірного масиву:
javascriptfor (const row of matrix) { for (const value of row) { console.log(value); } }
- це сучасний, читабельний і безпечний спосіб.
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.