Суммирование строковых значений в массиве

#javascript #arrays #google-tag-manager

#javascript #массивы #google-менеджер тегов

Вопрос:

Я пытаюсь суммировать цены на товары в массиве с помощью пользовательского JS GTM. Элементы массива являются переменными. Моя переменная источника данных выглядит следующим образом:

 dl_products_checkout = [ { name: 'Sports Gel SPF 20', id: '1125200001', price: '23.9', brand: 'ultrasun', quantity: 1 }, { name: 'Almost Powder Makeup SPF 15 9 g Neutral', id: '1081040004', price: '25.9', brand: 'Clinique', quantity: 1 } ]
 

К сожалению, я получаю NaN в качестве возврата. Вот мое решение до сих пор:

 function() {
  var items = {{dl_products_checkout}};
  var ids = [];
  var totalValue = 0;
  var i, len;
  for (i = 0, len = items.length; i < len; i  ) {
    totalValue  = parseInt(items[i].price);
  }
  return ids.push(totalValue);
}
 

Было бы здорово, если бы кто-нибудь мог сказать мне, что я здесь делаю не так. Большое спасибо!

С наилучшими пожеланиями, Антон

Комментарии:

1. вы уверены, что хотите добавлять целые числа? и возвращать только длину массива, а не сам массив? но я получаю нет NaN , если {{ ... }} верно.

2. Похоже, вы возвращаете массив, а не числовое значение, которое объясняет результат NaN…

3. если вы сделаете a parseInt('23.9') , вы получите 23 вместо 23.9 . Вам нужно parseFloat .

Ответ №1:

Во-первых, я думаю, что вы возвращаете неправильное значение…

Попробуйте это:

 /***
    We create a function, we might want to use it more then once.
***/
function CalculateTotal( items ) {
    // First we check if we have something to work with.
    if ( items.length < 1 || items === undefined ) {
        return null;

    } else { // We can do stuff
        var total_value = 0; // we need something to store the total value in.

        for ( var i = 0; i < items.length; i    ) { // Let's go through the list.
            total_value  = items[i].price; // add the price to total
            console.log( "total_value = "   total_value ); // check total value
            console.log( items[i].name   " = "   items[i].price ); // check item price
        }
        // now we are all done
        return total_value;
    }
 

И использовать, как:

 var total = CalculateTotal( dl_products_checkout );
 

Ответ №2:

Спасибо всем за быстрый ответ! Я только что нашел решение, которое работает для меня:

 function() {
  var items = {{dl_products_checkout}};
  var itemsValue = [];
  var sumValue = 0;
  var i, len;
  for (i = 0, len = items.length; i < len; i  ) {
    itemsValue.push(items[i].price);
        for (i = 0; i < itemsValue.length; i  ){
          sumValue = sumValue   parseFloat(itemsValue[i])
        }
  }
  return sumValue;
}
 

Хорошего дня!

Комментарии:

1. Привет, Flummox, поскольку я новичок в stackoverflow, я не очень хорошо знаком с процессами здесь. Не могли бы вы рассказать мне, как я могу потратить кредиты? Спасибо

2. Welkome! «кредиты» здесь являются голосами против. Я настоятельно рекомендую голосовать за то, что помогает, даже если только наполовину: они не стоят вам ни копейки, и пусть получатель знает, что вы оценили их вклад / работу. Под вашим именем вы видите свою репутацию, которая увеличивается за счет увеличения голосов или уменьшается за счет уменьшения голосов. Это в сочетании со значками дает вам представление (но не полностью) о пользователе и его способностях.