Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Срочно, как вернуть userData полностью что бы в него добавился новые продукты

- Ученик (103), на голосовании 7 месяцев назад
Как вернуть правильное объект с новыми данными
Есть функция которая должна вернуть новый массив внутри которого будет 2 продукта но когда я возвращаю полностью userData у меня в cart пусто только когда возвращаю usersData. Cart.products все правильно выводит в чем ошибка как сделать так что бы я могла возвращать сразу весь объект userData и у меня уже внутри него будет новый массив продуктов const userData = {
id: 1,
username: 'user123',
cart: {
products: [],
totalPrice: 0,
totalCounter: 0,
},
orders: [],
};

const ProductList = [
{
id: 1,
country: 'USA',
isPremium: true,
name: 'Product 1',
value: 1,
price: 10,
},
{
id: 2,
country: 'Canada',
isPremium: false,
name: 'Product 2',
value: 2,
price: 20,
},

];

function addProductToCart(userData, product) {

const newUserData = { ...userData };

newUserData.cart.products = [...newUserData.cart.products, product];

userData = newUserData;

return userData.cart.products;
}
console.log(addProductToCart(userData, ProductList[0]))
console.log(addProductToCart(userData, ProductList[1]))
Голосование за лучший ответ
М . Мастер (2118) 8 месяцев назад
Тебе нужно организовать класс, в контекст добавить переменную (массив) хранящую данные; далее написать метод для добавления новых данных; ну и метод(ы) для вывода этих данных. В идеале написать еще шаблон,по которому сверять добавляемые данные.

Cоздаешь экземпляра класса и вуаля. Если требуется этот класс использовать не только ниже по контексту, то и это можно организовать, прочти про синглтон.

Могу под ключ написать, но тут пахнет более 500-ста строками
Andrey Martynyuk Знаток (477) 8 месяцев назад
Такс, если можно модифицировать изначальный объект userData, то вот:
 const addProductToCart = (userData, product) => { 
userData.cart.products.push(product)
userData.cart.totalPrice += product.price
userData.cart.totalCounter += 1
return userData
}


addProductToCart(userData, ProductList[0])
addProductToCart(userData, ProductList[1])
console.log(userData.cart)
Функция принимает два параметра, объект пользователя и товар
В корзину пользователя, методом push(), добавляем продукт
Присваиваем итоговую цену и количество товаров
Возвращаем модифицированную юзер дату.

Дважды вызываем функцию addProductToCart, передаем в нее юзерДату и продукты
Смотрим в консоли на корзину юзера, видим, что оба товара добавлены, Вроде всё.

Ну, и напоследок, вот про такие приколы
 userData = newUserData 
вообще забудь, это очень плохо, даже понять сложно, что тут подразумевалось, не надо так делать.
Похожие вопросы