преобразование матрицы в массив с каждой перевернутой строкой

#javascript #arrays #matrix

#javascript #массивы #матрица

Вопрос:

Я должен преобразовать матрицу в массив. Например

 [
   [ 1, 2, 3 ],
   [ 4, 5, 6 ],
   [ 7, 8, 9 ],
]
  

следует преобразовать в [1, 2, 3, 6, 5, 4, 7, 8, 9 ].
Я пишу код

 function sortMatrix (matrix) {
    let newArr = [];
    for(let i = 0; i < matrix.length; i  )
    {
        newArr = newArr.concat(matrix[i]);
    }
    return newArr
}
  

но вывод [1, 2, 3, 4, 5, 6, 7, 8, 9 ]. Как я могу сделать так, чтобы во второй строке он считался с конца

Комментарии:

1.Добро пожаловать! Чего вы пытаетесь достичь = как вы это называете? Преобразование матрицы (2D-массива) в массив (1D) РАВНО matrix = array.flat() . С вашими данными: [[1, 2, 3], [4, 5, 6], [7, 8, 9]].flat() ЕСТЬ [1, 2, 3, 4, 5, 6, 7, 8, 9] .

2. @iAmOren но ожидаемый результат не в этом, а в том, что [1, 2, 3, 6, 5, 4, 7, 8, 9] средний массив перевернут.

3. @VLAZ, я понял, спасибо, но это не преобразование матрицы в массив. Заголовок должен гласить: «преобразование матрицы в массив с перевернутой каждой другой строкой» — если это то, чего хочет op — мы понятия не имеем о 4 или более строках / столбцах / должно быть квадратным / и т.д. Если только это не какая-то математика, которую я еще не изучил…

4. Том, исправь заголовок и основную часть вопроса, не меняя математику… Дайте подробную информацию о том, что вы хотите, что делать, если более 4 строк / столбцов / должны быть квадратными и т.д.

Ответ №1:

Чтобы исправить ваш код — поменяйте местами подмассивы с нечетными индексами.

Примечание: поскольку Array.reverse() исходный массив видоизменяется, нам нужно его мелкое клонирование с использованием распространения массива.

 function sortMatrix(matrix) {
  let newArr = [];
  for (let i = 0; i < matrix.length; i  ) {
    const arr = matrix[i];
    newArr = newArr.concat(i % 2 ? [...arr].reverse() : arr);
  }
  return newArr;
}

const matrix = [
 [ 1, 2, 3 ],
 [ 4, 5, 6 ],
 [ 7, 8, 9 ],
];

const result = sortMatrix(matrix);

console.log(result);  

Другим вариантом является использование Array.flatMap() и обратные подмассивы с нечетными индексами.

 function sortMatrix(matrix) {
  return matrix.flatMap((arr, i) => i % 2 ? [...arr].reverse() : arr);
}

const matrix = [
   [ 1, 2, 3 ],
   [ 4, 5, 6 ],
   [ 7, 8, 9 ],
];

const result = sortMatrix(matrix);

console.log(result);  

Ответ №2:

Вы можете использовать reduce для его создания.

 const arr = [
  [1,2,3],
  [4,5,6],
  [7,8,9]
]

const flatArray = (arr) => arr.reverse().reduce((acc, curr)=> {
  acc.push(...curr.reverse());
  return acc;
},[])

console.log(flatArray(arr))  

Ответ №3:

Вы можете напрямую использовать flat функцию

 array = [
   [ 1, 2, 3 ],
   [ 4, 5, 6 ],
   [ 7, 8, 9 ],
]

console.log(array.flat());  

Комментарии:

1. Вы были бы правы, если бы хотели преобразовать матрицу в массив. К сожалению, op сбивает нас с толку: op не хочет преобразовывать матрицу в массив. Мы можем только догадываться, чего хочет op.