сохранять не обязательно.
Как насчёт треугольника, обход по часовой стрелке, начинать с левого нижнего угла
getPerimetrTriangleBottom = (size, diagonal = []) => {
return getTemplateArr(size).reduceRight((pre, cur, i, arr) => {
if (i === 0) {
pre.push(cur[0]);
return pre.concat(
diagonal,
arr
.pop()
.slice(1, -1)
.reverse()
);
}
pre.push(cur[0]);
diagonal.unshift(cur[i]);
return pre;
}, []);
};
console.log('TriangleBottom', getPerimetrTriangleBottom(5));
getTemplateArr в стартпосте