Найти пропущенное число js

Искал по поиску но так и не нашел конкретного способа. Распишите, пожалуйста.

Есть массив

mass=[4,5,2,9,20,14].

Как мне найти пропущенные числа?

Пробовал и циклом проходиться, и через forEach, но вот просто не могу понять сам принцип. Что мне нужно сделать что бы найти его. Пробовал проверять в цикле, соответствует ли каждый элемент массива числу от 0 до mass.length, и если не соответствует то значит его в массиве нет. Но все равно не смог это нормально реализовать.


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

Автор решения: Сергей Мишин
  1. Сортируете исходный массив
  2. Берёте первый и последний элемент, заносите в переменные min и max

Можно воспользоваться Math.min() и Math.max() вместо первых двух пунктов. Как аргумент передав массив в формате rest ...mass

А можно и за один проход цикла найти сразу и минимум и максимум, не используя остальные функции и не сортируя.

В общем суть пока найти минимум и максимум в массиве.

  1. Генерируете новый массив от минимального (min) до максимального (max) числа. Хоть через цикл, хоть любыми функциями
  2. C помощью метода filter() исключаете из второго массива числа, которые есть в первом массиве, используя например метод includes()

Вместо 3, 4 пункта можно создать новый массив, сделать один цикл от минимума до максимума с шагом 1, где проверить, входит ли i в массив mass (с помощью includes) и если не входит, то сделать добавление числа в новый массив

→ Ссылка
Автор решения: Vadim

Когда не знаешь хороший ли код написал do:

  1. Смотреть в сторону прототипов объедков (слева) и в голове цикл: if(подходит мне)
  2. Когда уже имеешь два кода, тыкай сюда и сравнивай (еще важный парам сравнения - handling, а т.е. удобно ли тебе содержать этот цикл)

Мой вариант решения

const getMissed=(arr)=>{
    // сортируем, чтоб узнать наибольшее число
    arr = arr.sort((a,b)=>(a-b));
    // создаем пусто массив по наибольшему и заполняем чем-нибудь
    let missed = new Array(arr[arr.length-1]+1).fill(0);
    
    // удаляем ноль, можешь убрать
    delete missed[0];
    for(let a of arr){
        // удаляем чиселки которые мы have
        delete missed[a];
    }
    
    // возвращаем индексы без удаленных чиселок
    return Object.keys(missed);
};

const mass = [4, 5, 2, 9, 20, 14];
const miss = getMissed(mass);

console.log(mass);
console.log(miss, miss.length);

→ Ссылка
Автор решения: Виталий

Решение:

var mass_1 = [3, 4, 6, 1];
var mass_sort = mass_1.sort((a, b) => a - b);
var mass_3 = [];
var set_result = new Set();

for (var i = 0; i <= Math.max.apply(null, mass_sort); i++) {
  mass_3.push(i);
}

for (var i = 0; i <= Math.max.apply(null, mass_3); i++) {
  if (mass_sort.includes(mass_3[i]) === false) {
    set_result.add(mass_3[i]);
  }
}
console.log("Массив 2: " + mass_sort);
console.log("Массив 3: " + mass_3);
console.log(set_result);
→ Ссылка
Автор решения: Виталий

Решил задачу.

function findNumber(array) {
   var result =[];

for(var i =0;i <= Math.max.apply(null, array); i++){
   if( !array.includes(i) ){
      result.push(i);
   }
}
return result;
}
→ Ссылка