Показать сообщение отдельно
  #1 (permalink)  
Старый 15.12.2018, 18:21
Интересующийся
Отправить личное сообщение для JStudent Посмотреть профиль Найти все сообщения от JStudent
 
Регистрация: 10.04.2018
Сообщений: 14

массив из периметра матрицы
Всем привет, есть массив массивов произвольного размера.
Нужно пройтись по периметру по часовой стрелке и из этих значений в том же порядке сделать массив.
Сделал на reduce, может есть решение попроще?

const getTemplateArr = (size, arr = [], counter = 0) => {
  for (var i = 0; i < size; i++) {
    arr[i] = [];

    for (var j = 0; j < size; j++, counter++) {
      arr[i][j] = counter;
    }
  }
  return arr;
};

console.table(getTemplateArr(10));


getPerimetrNumber = (size, leftSide = []) => {
  return getTemplateArr(size).reduce((pre, cur, i, arr) => {
    if (i === 0) {
      return pre.concat(cur);
    }
    if (i === arr.length - 1) {
      return pre.concat(
        cur[cur.length - 1],
        cur.slice(0, cur.length - 1).reverse(),
        leftSide
      );
    }
    pre.push(cur[cur.length - 1]);
    leftSide.unshift(cur[0]);
    return pre;
  }, []);
};

console.log(getPerimetrNumber(10));
Ответить с цитированием