JS Есть матрица. Ввести в одномерный массив строки, в которых есть одинаковые элемента

Есть задача. Дана прямоугольная матрица размерности M x N. Сформировать одномерный массив, в который занести номера тех строк, в которых есть одинаковые элементы. Если таких нет, то вывести соответствующие сообщение. Я пытался делать с помощью сравнение первого элемента с каждым последующим, через счётчик цикла for. Но прикол в том, что он сравнивал первое значение с каждым следующим, а не к примеру второе со следующим.

for(i = 0; i < array.length; i++){
    for(j = 0; j < array.length; j++){
        if(array[i][0] != array[i][j]){
            if(array[i][0] == array[i][j]){
                savemo
            }
        }
    }
}

Если это возможно можно показать разные пути решения, нетолько через дополнительные методы.


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

Автор решения: Igor
var result = [];
for(var i = 0; i < array.length; i++) {
  var line = array[i];
  var found = false;
  for(var j = 0; !found && j < line.length; j++) {
    for(var k = j + 1; !found && k < line.length; k++) {
      if (line[j] == line[k])
        found = true;
    }
  }
  if (found)
    result.push(i);
}
if (result.length == 0)
  result = "All rows consist of unique elements.";
console.log(result);
→ Ссылка
Автор решения: vsemozhebuty

Можно ещё так схитрить:

const arr = [
  [0, 1, 1],
  [0, 1, 2],
  [0, 1, 0],
];

const linesWithDuplicates = arr.reduce(
  (acc, line, i) => {
    if (line.length > new Set(line).size) acc.push(i);
    return acc;
  },
  []
);

if (linesWithDuplicates.length) console.log(linesWithDuplicates);
else console.log('No duplicates.');

Или так:

const arr = [
  [0, 1, 1],
  [0, 1, 2],
  [0, 1, 0],
];

const linesWithDuplicates = arr.flatMap(
  (line, i) => line.length > new Set(line).size ? [i] : []
);

if (linesWithDuplicates.length) console.log(linesWithDuplicates);
else console.log('No duplicates.');

Но если матрицы большие, перебор в цикле с ранней остановкой при нахождении дубликата будет быстрее и памяти меньше будет расходовать.

→ Ссылка