Создать массив «Список покупок». Каждый элемент массива является объектом, который содержит название продукта, необходимое количество и куплен или нет. Написать несколько функций для работы с таким массивом.
Вывод всего списка на экран таким образом, чтобы сначала шли некупленные продукты, а потом – купленные.
Добавление покупки в список. Учтите, что при добавлении покупки с уже существующим в списке продуктом, необходимо увеличивать количество в существующей покупке, а не добавлять новую.
В коде я сделал что бы массив сортировался по статусу( куплена вещь или нет). Далее я в ручную создал новый обьект и добавил его с помощью метода push в массив. Не понимаю, как можно создать функцию которая будет создавать новый обьект этого класса и добавлять его в массив
class Product {
constructor(nameOfProduct, amount, status) {
this.nameOfProduct = nameOfProduct;
this.amount = amount;
this.status = status;
}
static sortProduct(a) {
if (a.status == 'Не куплен') return -1;
if (a.status == 'Куплен') return 1;
}
static showProduct(a) {
return a.nameOfProduct;
}
}
let shopList = [
new Product('Банан', 2, 'Не куплен'),
new Product('Апельсин', 5,'Куплен'),
new Product('Молоко', 1, 'Куплен'),
new Product('Груша', 10, 'Не куплен'),
];
shopList.sort(Product.sortProduct);
console.log(shopList.map(Product.showProduct));
let newProduct = new Product('Шоколад', 2, 'Не куплен');
shopList.push(newProduct);
shopList.sort(Product.sortProduct);
console.log(shopList.map(Product.showProduct));
class Product {
constructor(params = {}) {
Object.assign(this, {
pName: null,
amount: 1,
bought: false
}, { ...params });
}
static sortDefault(a, b) { // чтобы сначала шли некупленные продукты, а потом – купленные
return (a.bought - b.bought) * 10 + a.pName.localeCompare(b.pName);
};
}
Product.prototype.toString = function () {
return `${this.pName} (x${this.amount}), ${this.bought ? 'куплено' : 'не куплено'}`;
};
const shopList = [
{ pName: 'Банан', amount: 2 },
{ pName: 'Апельсин', amount: 5, bought: true },
{ pName: 'Молоко', bought: true },
{ pName: 'Груша', amount: 10 }
].map(prodDef => new Product(prodDef));
const addToShopList = prodDef => { // при добавлении покупки с уже существующим в списке продуктом, необходимо увеличивать количество в существующей покупке, а не добавлять новую
const prod = shopList.find(prod => prod.pName === prodDef.pName);
if (!prod) return shopList.push(new Product(prodDef));
prod.amount += prodDef.amount;
};
const printShopList = () => shopList.forEach(
(prod, i) => console.log(`${i + 1}. ${prod}`)
);
shopList.sort(Product.sortDefault);
printShopList();
console.log('---');
addToShopList({ pName: 'Банан', amount: 3 });
addToShopList({ pName: 'Шоколад', amount: 2 });
shopList.sort(Product.sortDefault);
printShopList();
class Product {
...
static addProduct(products, nameOfProduct, amount, status) {
products.push(new Product(nameOfProduct, amount, status));
}
}
...
Product.addProduct(shopList, 'Шоколад', 2, 'Не куплен');
Посмотрите, как должна выглядеть функция сравнения для Array.sort
:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
У меня есть компонент(в этом случае не важно какой, важна суть), в котором что-то записано в template, все по дефолту
Я не силен в js и только начинаю разбираться с нимСмог смастерить вот такой код, его задача:
Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском
Помогите разместить блок(content) под меню, а то я голову уже сломалИ все ни как не получается