Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (function () {
- "use strict";
- let phonePrice = 23000;
- const igraBtn = document.createElement("button");
- const igraPercentageBtn = document.createElement("button");
- const igraDisplayBtn = document.createElement("button");
- const igraInput = document.createElement("input");
- const promoInput = document.createElement("input");
- igraDisplayBtn.classList.add("igra-btn-display");
- igraDisplayBtn.textContent = "X";
- //обработка кнопки крестик
- igraDisplayBtn.addEventListener("click", () => {
- igraBtn.classList.toggle('d-n');
- igraPercentageBtn.classList.toggle('d-n');
- igraInput.classList.toggle('d-n');
- promoInput.classList.toggle('d-n');
- });
- //обработка кнопки Посчитать
- igraBtn.textContent = "Посчитать";
- igraBtn.classList.add("igra-btn");
- igraBtn.addEventListener("click", () => {
- phonePrice = Number(igraInput.value);
- igraSortCatalog();
- });
- //обработка кнопки сортировать
- igraPercentageBtn.textContent = "Сортировать";
- igraPercentageBtn.classList.add("igra-btn-percent");
- igraPercentageBtn.addEventListener("click", () => {
- phonePrice = Number(igraInput.value);
- igraSortPercentage();
- });
- //обработка поля ввода цены
- igraInput.type = "number";
- igraInput.classList.add("igra-input");
- igraInput.value = phonePrice;
- igraInput.addEventListener("input", () => {
- igraInput.value = igraInput.value.replace(/[^0-9]/g, "");
- phonePrice = Number(igraInput.value);
- });
- let igraPromoString = ''
- let promoArr = [];
- //обработка поля ввода промокода
- //promoInput.type = "string";
- promoInput.classList.add("promo-input");
- promoInput.value = `cats 20000 70000 7000
- dogs 7000 60000 6000
- cows 3000 15000 5500
- eagles 21000 105000 7500`;
- promoInput.addEventListener("input", () => {
- // очищаем массив перед каждым новым заполнением
- igraPromoString=promoInput.value.split(/\s+/)
- for (let i=0; i<igraPromoString.length; i+=4) {
- let promoName = igraPromoString[i];
- let discont = +igraPromoString[i+1];
- let minSum = +igraPromoString[i+2]
- let promoPrice = +igraPromoString[i+3]
- promoArr.push([promoName, discont, minSum, promoPrice])
- }
- });
- setTimeout(() => {
- const igraBody = document.body;
- igraBody.appendChild(igraDisplayBtn);
- igraBody.appendChild(igraPercentageBtn);
- igraBody.appendChild(igraBtn);
- igraBody.appendChild(igraInput);
- igraBody.appendChild(promoInput);
- }, 1000);
- let igraCards = [];
- function getIgraCards() {
- return (igraCards = Array.from(document.querySelectorAll(".catalog-item")));
- }
- function mapIgraCards() {
- igraCards = getIgraCards();
- igraCards.forEach((card) => {
- if (card.querySelector(".item-price")) {
- const igraItemPrice = igraConvertToNumber(
- card.querySelector(".item-price").textContent
- );
- const igraItemBonus = igraConvertToNumber(
- card.querySelector(".bonus-amount").textContent
- );
- const igraItemMoney = card.querySelector(".item-money");
- const igraItemProfit = document.createElement("div");
- igraItemProfit.classList.add("item-profit");
- igraItemProfit.textContent = igraGetProfitPrice(
- igraItemPrice,
- igraItemBonus
- ) + '\n' + promoWorkHard(igraItemPrice, igraItemBonus, promoArr, phonePrice);
- if (igraItemMoney.querySelector(".item-profit")) {
- igraItemMoney.querySelector(".item-profit").remove();
- }
- igraItemMoney.append(igraItemProfit);
- }
- });
- }
- function igraConvertToNumber(str) {
- // Удаляем все пробелы из строки
- let stringWithoutSpaces = str.replace(/ /g, "");
- // Удаляем знак рубля, если есть
- let stringWithoutCurrencySign = stringWithoutSpaces.replace("₽", "");
- // Преобразуем строку в число
- let number = parseFloat(stringWithoutCurrencySign);
- // Возвращаем число
- return number;
- }
- function igraGetProfitPrice(price, bonus) {
- let a = price - bonus;
- let b = phonePrice - a;
- let c = (phonePrice - price + 0.8 * bonus) * 100 / price
- return c.toFixed(2);
- }
- function igraSortCatalog() {
- mapIgraCards();
- let igraSortedCards = sortDivByPrice(getIgraCards());
- const igraCatalogItems = document.querySelector(".catalog-listing__items");
- igraCatalogItems.innerHTML = "";
- igraSortedCards.map((card) => {
- igraCatalogItems.append(card);
- });
- }
- function igraSortPercentage() {
- mapIgraCards();
- let igraSortedCards = sortDivByPricePercentage(getIgraCards());
- console.log(igraSortedCards)
- const igraCatalogItems = document.querySelector(".catalog-items-list");
- igraCatalogItems.innerHTML = "";
- igraSortedCards.map((card) => {
- igraCatalogItems.append(card);
- });
- }
- //функция подсчета промокода
- function promoWorkHard(phonePrice, bonusNum, promoArr, igraPrice){
- let bestRoi = 0, bestPromoName = "";
- let RoiMin = 0, RoiMax = 0
- let bestPhoneCount = 0, totalPriceMin = 0, totalPriceMax = 0, bonusPercent = 0;
- let totalBonus = 0;
- for (let i = 0; i < promoArr.length; i++){
- let promoName = promoArr[i][0], discont = promoArr[i][1];
- let minSum = promoArr[i][2], promoPrice= promoArr[i][3];
- let kMax = Math.ceil(minSum / phonePrice);
- let kMin = Math.floor(minSum / phonePrice);
- let totalPriceMax = phonePrice * kMax;
- let totalPriceMin = phonePrice * kMin;
- bonusPercent = bonusNum / phonePrice;
- let totalBonusMax = (totalPriceMax - discont) * bonusPercent * 0.8
- let totalBonusMin = (totalPriceMin - discont) * bonusPercent * 0.8
- RoiMax = (igraPrice * kMax - totalPriceMax + totalBonusMax + promoPrice) / (totalPriceMax + promoPrice)
- RoiMin = (igraPrice * kMin - totalPriceMin + totalBonusMin + promoPrice) / (totalPriceMin + promoPrice)
- if(RoiMin > bestRoi){
- bestRoi = RoiMin
- bestPhoneCount = kMin
- bestPromoName = promoName
- }
- if(RoiMax > bestRoi){
- bestRoi = RoiMax
- bestPhoneCount = kMax
- bestPromoName = promoName
- }
- }
- return `${bestPromoName}, ${bestPhoneCount}, ${bestRoi.toFixed(2)}`;
- }
- function sortPrices(arr) {
- const prices = arr.map((div) => {
- const itemProfit = div.querySelector(".item-profit");
- const price = itemProfit.textContent;
- return parseInt(price);
- });
- prices.sort((a, b) => b - a);
- return prices;
- }
- function sortDivByPrice(arr) {
- const sortedArr = arr.sort((a, b) => {
- if (a.querySelector(".item-profit")) {
- const priceA = Number(a.querySelector(".item-profit").textContent);
- const priceB = Number(b.querySelector(".item-profit").textContent);
- return priceB - priceA;
- }
- });
- return sortedArr;
- }
- function sortDivByPricePercentage(arr) {
- const sortedArr = arr.sort((a, b) => {
- if (a.querySelector(".bonus-percent")) {
- const priceA = Number(igraMyGeeks(a.querySelector(".bonus-percent").textContent));
- const priceB = Number(igraMyGeeks(b.querySelector(".bonus-percent").textContent));
- return priceB - priceA;
- }
- });
- return sortedArr;
- }
- function igraMyGeeks(string) {
- // Input string
- let str = string;
- // Using match with regEx
- let matches = str.match(/(\d+)/);
- // Display output if number extracted
- if (matches) {
- return matches[0];
- }
- }
- })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement