Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Сумма значений одной переменной массива (https://javascript.ru/forum/misc/83778-summa-znachenijj-odnojj-peremennojj-massiva.html)

karnager 08.03.2022 14:20

Сумма значений одной переменной массива
 
Всем привет. Не являюсь разработчиком, решаю прикладные задачи как маркетолог. Поэтому рассмотрю решение моего вопроса за оплату. Можете написать в ЛС

У меня есть массив из N-го количества товаров:

ecommerce: {
    currency: "RUB",
    value: "1000.00",
    items: [
      {
        item_id: 10793,
        item_name: "Товар №1",
        item_brand: "",
        price: 500,
        item_category: "Книги",
        quantity: 1,
        id: "10793"
      },
      {
        item_id: 13372,
        item_name: "Товар №2",
        item_brand: "",
        price: 500,
        item_category: "Книги",
        quantity: 1,
        id: "13372"
      }
    ]
  }


У меня в этом коде есть для каждого товара переменная quantity, которая отображает кол-во товаров конкретного наименования. На выходе мне требуется получить общую сумму всех товаров. В данном случае 1+1 = 2

Если чуть подробнее, то решение необходимо на ECMASCRIPT 5 и ниже, последней версии не подойдет. У меня есть сайт (интернет-магазин), и там есть корзина с товарами. Вот мне нужно quantity вытаскивать для всех товаров и записывать в отдельную переменную. Если пользователь добавил 5 товаров в корзину, то quantity = 5, если 2, то 2. Соответственно, массив одинаковый, отличается только кол-вом товаров в нем, а все переменные одинаковые, и везде есть quantity.

Мне нужно прогнать по коду, найти кол-во quantity, их значения и просуммировать.

Если было бы:
Товар №1 - quantity 1
Товар №2 - quantity 2
То результат переменной должен быть 3

Спасибо

karnager 08.03.2022 14:55

Нашел решение сам!

function Quantity() {
    var items = ecommerce / ..... /;
    for(var i = 0, res = 0; i < items.length; i++) {
        res += items[i].quantity;
    }
    return res;
}
 
var result = Quantity();

karnager 08.03.2022 23:17

Нашел еще вот такое решение:

function(){  
var prods = {{ecommerce.items}};  
var i;
var sum = 0;   
if (!prods) { return; }
   for (i = 0; i < prods.length; i++) {    
    sum +=parseInt((prods[i].quantity))
}   
return sum; 
}


Только проблема заключается в том, что массив может иметь два формата. Либо items:

items: [
      {
        id: 10793,
        name: "Товар №1",
        sku: 10793,
        price: 24900,
        stocklevel: null,
        quantity: 1
      },
      {
        id: 13372,
        name: "Товар №2",
        sku: 13372,
        price: 700,
        stocklevel: null,
        quantity: 1
      }
    ]
  },


Либо products:

products: [
      {
        id: 10793,
        name: "Товар №1",
        sku: 10793,
        price: 24900,
        stocklevel: null,
        quantity: 1
      },
      {
        id: 13372,
        name: "Товар №2",
        sku: 13372,
        price: 700,
        stocklevel: null,
        quantity: 1
      }
    ]
  },


И вот как написать универсальный код для того, чтобы считало quantity и для products [] и для items [], нет идей, потому как в var prods подставляю или ecommerce.items или ecommerce.products

voraa 09.03.2022 07:41

var prods = ecommerce.items || ecommerce.products;

Что означают {{ }} в var prods = {{ecommerce.items}}; ?

Зачем parseInt в sum +=parseInt((prods[i].quantity)); и внутренние скобки?


Часовой пояс GMT +3, время: 10:43.