Федор, ты можешь примерно так сделать свою корзину безо всяких лишних проверок. А потом в любом компоненте выгружать товары , по айдишникам узнаешь информацию о каждом и выводишь все что нужно.
У каждого товара должен быть "артикул" в базе данных или в твоём случае json файле. Его ты и должен передавать в метод. Если например два одинаковых Айфона пользователь захочет купить, то будет 2 одинаковых артикула.
ОНО ПОТОМУ И НЕ ВИДИТ! Ты зачем меняешь айди товара? У тебя айфон12 например хранится под айди 3 , а если ты добавишь его в корзину самым первым то в корзину вместо 3 будет внесено 1.
А если ты добавишь его вторым то вместо 3 будет 2. И когда будешь выгружать информацию по этим айдишникам , то будет каша , так как в базе этот товар хранится под другим номером.