Помогите исправить обработку матрицы

Цель в том, чтобы найти в матрице нули и заполнить нулями принадлежащие к элементу строку и столбец.

Написал функцию, которая по идее должна работать, но как я понял, на этапе перезаписи происходят что то непонятное для меня и все элементы обнуляются, подскажите как это исправить.

const myMatrix = [
[0, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 0, 4, 5],
[1, 2, 3, 4, 5],
[0, 2, 3, 4, 5]
];

function func (matrix) {
    const matrixTemp = matrix.slice()

  matrix.forEach ((row, rowIndex) => {

    row.forEach((rowElem, elemId) => {
    
    if(rowElem === 0) {
        matrix[rowIndex].forEach((item,index) => {
        if(matrixTemp[rowIndex][index] === 0) {
            return
        }
            matrixTemp[rowIndex][index] = 0
        })
        
        matrix.forEach((item, index) => {
            if(matrixTemp[index][elemId] === 0) {
            return
          }
            matrixTemp[index][elemId] = 0
        })
    }

    })
  })
  
  return matrixTemp
}

console.log("result:", func(myMatrix))

Ожидаемый результат:

const resultMatrix = [
[0, 0, 0, 0, 0],
[0, 2, 0, 4, 5],
[0, 0, 0, 0, 0],
[0, 2, 0, 4, 5],
[0, 0, 0, 0, 0]
];

Ответы (2 шт):

Автор решения: DAYMERE
const cols = [],
      rows = [];

//Получаем колонки и ряды которые заполним нулями
myMatrix.forEach((row, rowId) => {
  row.forEach((n, colId) => {
    if(n === 0){        
      cols.push(colId);
      rows.push(rowId);
    }
  })
});

//Заполняем нулями
const result = myMatrix.reduce((res, row, rowId) => {
  if(rows.includes(rowId)){
    return [...res, Array.from({length: row.length}).fill(0)];
  } 
  return [...res, row.map((col, colId) => cols.includes(colId) ? 0 : col)];
}, []);
→ Ссылка
Автор решения: HTO HOT

Здраствуйте , проблема вашего кода это вот эта строчка:

const matrixTemp = matrix.slice()

Массивы имеют ссылочный тип данных , и для того чтобы один не ссылался на другой вы решили ,что пустого slice будет достаточно. Но нет, это прекрасно работает с одномерными массивами ,а вот с многомерными уже не работает.

Можете заменить вашу проблемную строчку на вот эту:

const matrixTemp = JSON.parse(JSON.stringify(matrix));

Это строчка конвертирует матрицу в строчный вид , и обратно достаёт из строчного.

→ Ссылка