#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! «кредиты» здесь являются голосами против. Я настоятельно рекомендую голосовать за то, что помогает, даже если только наполовину: они не стоят вам ни копейки, и пусть получатель знает, что вы оценили их вклад / работу. Под вашим именем вы видите свою репутацию, которая увеличивается за счет увеличения голосов или уменьшается за счет уменьшения голосов. Это в сочетании со значками дает вам представление (но не полностью) о пользователе и его способностях.