Правильно ли написан код или его нужно как то переписать в ООП стиль?

На странице продукта есть компонент React с таблицой с ценами в зависимости от веса фасовки и коэффицента цены. Для того чтобы не дублировать input создал массив для обхода по нему

const valkoef =
[
{
    weight: 0.1,
    koef: 1.7,
    calcDiscountPrice,
    calcBasicPrice
},
{
    weight: 0.25,
    koef: 1.25,
    calcDiscountPrice,
    calcBasicPrice
},
{
    weight: 0.5,
    koef: 1.05,
    calcDiscountPrice,
    calcBasicPrice
},
{
    weight: 0.75,
    koef: 1.1,
    calcDiscountPrice,
    calcBasicPrice
},
{
    weight: 1,
    koef: 1,
    calcDiscountPrice,
    calcBasicPrice
},
{
    weight: 0.025,
    koef: 1.85,
    calcDiscountPrice,
    calcBasicPrice
},

]

product.basePrice = 700
const amountOfDiscount = 0.1

Функции calcDiscountPrice и calcBasicPrice считают цену со скидкой и цену базовую в зависмости от выбранной фасовки:

function calcDiscountPrice () {
    return (Math.round(((this.weight * product.basePrice)* this.koef) - ((this.weight * product.basePrice)* this.koef) * amountOfDiscount))
}

function calcBasicPrice (){
    return Math.round((this.weight * product.basePrice) * this.koef)
}

Прохожу по массиву:

{valkoef.map(item => (
            <label className='priceTable__label'>
            <input type="radio" name="options[packaging]" value={item.weight} data-koef={item.koef}></input>
            <span>{item.calcDiscountPrice()} руб.</span> <span className='priceTable__weight'> / {item.weight} кг </span> 
            <span className='priceTable__undiscounted'>{item.calcBasicPrice()} руб.</span>
            </label>
        ))}

Вот что в итоге должно получиться:

введите сюда описание изображения

И все вроде бы работает, но меня смущает правильность написания кода. Как его можно переписать по правилам хорошего тона? Может создать класс и в ней написать два метода для подсчета. а в объекте уже вызывать эти методы, только непонятно как вызывать эти методы для каждого объекта в массиве. Как вы бы переписали код следуя правилам хорошего тона?


Ответы (0 шт):