Все зависит от конкретной задачи. В реальной жизни вы столкнетесь с циклами внутри циклов - когда будете например активно работать над преобразованием данных. Например используя методы массивов (вроде map, reduce, forEach и т.п.).
// задача - сделать все буквы А в именах заглавными
const names = ['вася', 'петя', 'алла', 'маша', 'юля', 'вова'];
// первый цикл
const adjustedNames = names.map(name => {
const nameArr = [...name];
// второй цикл
const nameAdjusted = nameArr.map(letter => letter === 'а' ? 'А' : letter);
return nameAdjusted.join('');
});
console.log(adjustedNames); // [ "вАся", "петя", "АллА", "мАшА", "юля", "вовА" ]
Всегда нужно помнить, что цикл внутри цикла - это очень ресурсоемкая задача.
Если сложность одного цикла равняется O(n), то сложность цикла внутри цикла возрастает на порядок и равняется O(n2) что может привести к проблемам и задержкам в вычислениях в случае обработки больших массивов из тысяч+ элементов.
По этому не используйте такую вещь без крайней необходимости. Современный синтаксический сахар в JS позволяет делать много вложенных массивов не замечая проблем.