Как в массив вставить новое число которое будет находится между меньшим и большим его числами?

Есть массив

const arr = [10,15,16,19,23,25,34];

Есть число

const number = 21;

Как вставить это число по возрастанию в массив, т.е. между 19 и 23?
Чтобы массив стал таким:

[10,15,16,19,21,23,25,34]

Массив всегда возрастающий.


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

Автор решения: Николай Осминин

Можно сделать так:

const arr = [10, 15, 16, 19, 23, 25, 34]
const number = 21
    
arr.push(number)
arr.sort()
    
console.log(arr)

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

Учитывая что

Массив всегда возрастающий

, можно просто найти индекс первого встреченного элемента со значением больше вставляемого числа - и по этому индексу выполнить вставку:

const arr = [10,15,16,19,23,25,34];
const number = 21;

const idx = arr.findIndex(v => v > number);
arr.splice(idx > -1 ? idx : arr.length, 0, number);

console.log(JSON.stringify(arr));

Если в массиве не нашлось значения больше чем вставляемое (и findIndex вернул -1), помещаем новый элемент в конец массива (вместо idx в качестве индекса используя array.length, то есть индекс следующий за индексом самого последнего элемента).


Алгоритм можно улучшить, вместо поиска последовательным перебором применив двоичный поиск (например). Тема алгоритмов поиска в отсортированном массиве - за рамками предмета данного вопроса, но информации на эту тему в сети предостаточно.

MDN:
Array.prototype.findIndex
Array.prototype.splice

→ Ссылка