Norum, на "освоение" уже потрачено больше года, результат вот прям совсем не впечатляющий. Такими темпами "дорасту" не случится - в гроб раньше ляжете.
AnatolyKS, надо экранировать спецсимволы при создании регулярного выражения, вместо higlight передавайте в конструктор higlight.replace(/[\\^$|.*?+{}()[\]]/g, '\\$&').
Всё учитывается - нет разницы, с каким массивом работать, пустым или нет. Может, вы не до конца понимаете значение словосочетания "пустой массив"? Случайно не путаете с "массив отсутствует"? Если так - проверяйте, чем является savedProjects, если не массив, тогда вместо выполнения фильтрации сразу возвращайте пустой массив:
Алексей Уколов, нет проблем сделать начальный id параметром. А вообще, это всё не так важно, очевидно же, что речь идёт о какой-то заглушке или учебном проекте - какая на хрен генерация id на клиенте?
twobomb, почему же, просто - надо получать с коротким кодом тот же результат, что и с длинным. Ищем границу, где количество цифр результата изменяется. Всё. Чего там при этом калькулятор говорит - значения не имеет.