Хорошо, я могу дать вам несколько подсказок.
Как правило, вам нужно 1 родительский цикл , определенный как ROW , который печатает каждую строку M и вложенного цикла (s).) определяется как COL , используемый для конкатенации результата с '*' или '-'.
for (let row = n; row >= 0; row -= 1)
внутри ROW, если вам нужна конструкция else для проверки номера строки и проверкиесли вы находитесь на вершине M или внизу, т.е. , вам нужно разделить M на 2 части , TOP и BOTTOM .
Внутри ROW вам нужны вложенные циклы , определенные как COL , чтобы вы могли объединить результат, используя COL
Короче говоря в каждомвложенный цикл, вы должны объединить результат + = '*' или '-';и в каждой строке вы должны объединить результат + = '\ r \ n', т.е. новая строка .
Верхняя часть:
---***---***---
--*****-*****--
Нижняя часть:
-***-*****-***-
***---***---***
, поэтому у вас есть if (top) else (bottom) logic
Внутри логики TOP / BOTTOM вы должны выяснить схему т.е. сколько у вас звезд / тире и как они увеличивают / уменьшают на каждом ROW.
Некоторые переменные, которые могут вам помочь:
const n = 7;
const middle = Math.ceil(n / 2);
let asterisksTopLength = n;
let asterisksBottomLength = n - 1;
let dashesBottomLength = 1;
let dashesTopLength = n;
let result = '';
СОВЕТ: Вам необходимо изменить переменные тире / звездочки в каждой строке внутри TOP / BOTTOM, если это не тело
Попробуйте также разделить задачу на несколько небольших задач.то есть попытаться выяснить, как сначала печатать тире, т.е.
---
--
-
, а затем как конкатенировать тире выше с помощью *, чтобы они стали
---***
--*****
-***
и т. д.
Кстати, есть решение без вложенных циклов, то есть использование только 1 цикла и, как вы уже выяснили, string.repeat (), но я считаю, что ваша задача - попрактиковаться во вложенных циклах, поэтому вам следует избегать .repeat ().