Проверяет умение корректно обрабатывать отрицательные индексы при вставке элемента в массив, чтобы он оказался первым среди элементов своего типа.
Отрицательный индекс при вставке — это классический граничный случай, который часто ломает логику, если его не обработать явно. В большинстве языков отрицательный индекс либо означает отсчёт с конца (Python, JS slice), либо приводит к ошибке. Но в контексте задачи «элемент должен стать первым среди элементов своего типа» отрицательное значение — это сигнал, что позиция невалидна и её нужно нормализовать.
Если передать отрицательное число в splice или slice, поведение будет неочевидным: например, arr.splice(-1, 0, x) вставит элемент перед последним, а не в начало. Это противоречит требованию «стать первым среди своего типа».
Самый простой способ — заменить отрицательный индекс на 0, если тип элемента не важен, либо найти первый индекс элемента того же типа и вставить перед ним.
function insertFirstOfType(arr, item, type) {
// Находим первый индекс элемента нужного типа
const firstIdx = arr.findIndex(el => el.type === type);
// Если не нашли — добавляем в конец
if (firstIdx === -1) return [...arr, item];
// Вставляем перед первым элементом этого типа
return [...arr.slice(0, firstIdx), item, ...arr.slice(firstIdx)];
}
// Пример
const data = [{type: 'a'}, {type: 'b'}, {type: 'a'}];
console.log(insertFirstOfType(data, {type: 'a'}, 'a'));
// [{type:'a'}, {type:'a'}, {type:'b'}, {type:'a'}]Если позиция приходит извне и может быть отрицательной, её нужно нормализовать до вызова вставки:
function safeInsert(arr, index, item) {
const safeIndex = index < 0 ? 0 : Math.min(index, arr.length);
const copy = arr.slice();
copy.splice(safeIndex, 0, item);
return copy;
}Такой подход гарантирует, что элемент не «улетит» в конец или в середину из-за отрицательного значения.
Итог: отрицательный индекс — это сигнал о невалидной позиции, и его нужно либо нормализовать до 0, либо заменить поиском первого элемента нужного типа. Это делает вставку предсказуемой и защищает от скрытых багов.