Имеется массив объектов цен. У каждого объекта цены есть её значение и условие применения, которое зависит от количество заказанных продуктов для этой цены.
Допустим, в корзине лежит товар Pan в количестве 125 штук по цене 2 за штуку. Я пытаюсь получить и вывести следующую возможную цену на этот товар (если смотреть ниже, то это 1 за штуку, если заказано более 500 штук товара).
// В корзине лежит товар Pan в количестве 125 штук по цене 2 за штуку.
let cart = [{
id: 5854,
name: 'Pan',
quantity: 125,
price: 2,
attributes: {
// Все возможные цены на товар Pan в зависимости от заказанного количества
prices: [{
id: 1,
value: 10,
condition_quantity: 0,
},
{
id: 2,
value: 8,
condition_quantity: 5,
},
{
id: 3,
value: 6,
condition_quantity: 10,
},
{
id: 4,
value: 4,
condition_quantity: 50,
},
{
id: 777,
value: 1,
condition_quantity: 500,
},
{
id: 900,
value: 2,
condition_quantity: 100,
},
]
},
}];
function conditionPrice(item) {
//все цены, кроме текущей
let prices = item.attributes.prices.filter(row => row.value != item.price);
//перебираем и сохраняем только те, которые имеют условие для применения цены
let prices_for_select = [];
for (let key in prices) {
let price = prices[key];
if (price.condition_quantity > 0) {
prices_for_select.push(price);
}
}
//определяем, какая цена подходит
if (prices_for_select.length > 0) {
let min = prices_for_select[0];
for (let key in prices_for_select) {
let price = prices_for_select[key];
if (price.condition_quantity < min.condition_quantity && price.condition_quantity > item.quantity) {
min = price;
}
}
return min;
}
return false;
}
console.log(conditionPrice(cart[0]));
Но что-то работает не так...
Ожидаемый выход
Пример 1
Пример 2
Пример 3
Где я ошибся?
Наверное так подойдет:
function conditionPrice(item) {
return item.attributes.prices
// отфильтруем все что меньше
.filter(i => i.condition_quantity >= item.quantity)
// отсортируем по увеличению значения condition_quantity
.sort((a,b) => a.condition_quantity - b.condition_quantity)
// вернем первый элемент
.shift();
}
// В корзине лежит товар Pan в количестве 125 штук по цене 2 за штуку.
let cart = [{
id: 5854,
name: 'Pan',
quantity: 125,
price: 2,
attributes: {
// Все возможные цены на товар Pan в зависимости от заказанного количества
prices: [{
id: 1,
value: 10,
condition_quantity: 0,
},
{
id: 2,
value: 8,
condition_quantity: 5,
},
{
id: 3,
value: 6,
condition_quantity: 10,
},
{
id: 4,
value: 4,
condition_quantity: 50,
},
{
id: 777,
value: 1,
condition_quantity: 500,
},
{
id: 900,
value: 2,
condition_quantity: 100,
},
]
},
}];
function conditionPrice(item) {
return item.attributes.prices
.filter(i => i.condition_quantity >= item.quantity)
.sort((a,b) => a.condition_quantity - b.condition_quantity)
.shift();
}
console.log(conditionPrice(cart[0]));
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Хочу использовать вебсокеты для получения курса валют с биржи битфинексНо в браузере получаю ошибку
Есть js скрипт который загружает выбранный файл по клику на #uploadImage