Есть кнопка, которая проверяет массив на наличие объекта, если объекта нет, добавляется этот объект.
При первой проверке(когда массив пустой) в массив добавляется нужный объект
Но почему то далее при проверке оказывается что в массиве есть объект, которого там нет.
Я не сильный специалист в ангуляре, но мне кажется дело тут не в нем. Меня очень смущает строчка if (elem !== scope.items)
Что у Вас лежит в scope.items?
Какая по твоему логика должна быть заложена в переменную i?
Судя по коду переменная i примет значение true, если хотя бы один один элемент elemв массиве cart ,будет не равен scope.items
Соответственно, ПОЧТИ ЛЮБОЙ вновь добавляемый элемент scope.items в массив cart будет не равен ХОТЯ БЫ ОДНОМУ, что уже есть в массиве => на выходе ты получишь i = true
при i === true блок кода на строках 58 - 61 выполняться не будет