Найти пропущенное число js
Искал по поиску но так и не нашел конкретного способа. Распишите, пожалуйста.
Есть массив
mass=[4,5,2,9,20,14].
Как мне найти пропущенные числа?
Пробовал и циклом проходиться, и через forEach, но вот просто не могу понять сам принцип. Что мне нужно сделать что бы найти его.
Пробовал проверять в цикле, соответствует ли каждый элемент массива числу от 0 до mass.length, и если не соответствует то значит его в массиве нет. Но все равно не смог это нормально реализовать.
Ответы (4 шт):
- Сортируете исходный массив
- Берёте первый и последний элемент, заносите в переменные min и max
Можно воспользоваться Math.min() и Math.max() вместо первых двух пунктов. Как аргумент передав массив в формате rest ...mass
А можно и за один проход цикла найти сразу и минимум и максимум, не используя остальные функции и не сортируя.
В общем суть пока найти минимум и максимум в массиве.
- Генерируете новый массив от минимального (min) до максимального (max) числа. Хоть через цикл, хоть любыми функциями
- C помощью метода filter() исключаете из второго массива числа, которые есть в первом массиве, используя например метод includes()
Вместо 3, 4 пункта можно создать новый массив, сделать один цикл от минимума до максимума с шагом 1, где проверить, входит ли i в массив mass (с помощью includes) и если не входит, то сделать добавление числа в новый массив
Когда не знаешь хороший ли код написал do:
- Смотреть в сторону прототипов объедков (слева) и в голове цикл:
if(подходит мне) - Когда уже имеешь два кода, тыкай сюда и сравнивай (еще важный парам сравнения - 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;
}