2017-01-12 2 views
-2

У меня есть объект и нужно суммировать/усреднять каждый динамический диапазон. Однако, похоже, они не могут преобразовать их в числа. Пожалуйста помоги.JS Как суммировать/Средняя?

Console Log
Code Sample

Expand/Collapse Created : 1/3/2017 ‎<span>(10)‎</span> 
Expand/Collapse Created : 1/4/2017 ‎<span>(38)‎</span> 
Expand/Collapse Created : 1/5/2017 ‎‎<span>(13)</span> 
Expand/Collapse Created : 1/6/2017 ‎‎<span>(35)</span> 
Expand/Collapse Created : 1/9/2017 ‎‎<span>(46)</span> 
Expand/Collapse Created : 1/10/2017 ‎‎<span>(17)</span> 
Expand/Collapse Created : 1/11/2017 ‎‎<span>(27)</span> 


var arr = []; 
    $(".ms-gb span").each(function(index, elem){ 
     arr.push($(this).text()); 
    }); 

    $("#result").text(arr.join("+")); // (10)+‎(38)+‎(13)+‎(35)+‎(46)+‎(17)+‎(27) 

var allNumbers = document.getElementById('result').innerText; // (10)+‎(38)+‎(13)+‎(35)+‎(46)+‎(17)+‎(27) 
    allNumbers = allNumbers.replace(/["'()]/g,""); // ‎‎10+‎38+‎13+‎35+‎46+‎17+‎28 
var newString = allNumbers.split("+"); // Object - ["‎10", "‎38", "‎13", "‎35", "‎46", "‎17", "‎27"] 
+0

попробуйте обратиться в функцию ParseInt, например, 'parseInt (" 10 ")' возвращает число 10 – derp

ответ

0

Вы можете вырезать нечисловых символов, разбор каждого числа, а затем выполнить сложение внутри цикла.

// variables 
 
var sum = 0; 
 
var average = 0; 
 
var numOfSpan = $('span').length; 
 

 
// each span loop 
 
$('span').each(function(key, val){ 
 
    // add the value of the span to the sum var 
 
    sum+= parseInt($(this).text().replace(/\D/g,'')); 
 
    
 
    // on the last itteration ... 
 
    if(key == (numOfSpan - 1)) { 
 
    
 
    // calulate average 
 
    average = sum/numOfSpan; 
 
    
 
    // log sum and average 
 
    console.log('sum = ' + sum); 
 
    console.log('average = ' + average); 
 
    } 
 
});
<span>(10)</span> 
 
‎<span>(38)</span> 
 
<span>(13)</span> 
 
<span>(35)</span> 
 
‎<span>(46)</span> 
 
‎‎<span>(17)</span> 
 
<span>(27)</span> 
 

 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+1

Огромное вам спасибо, это именно то, что я искал! Отлично работает. – user1545463

+0

Awesome. Рад, что это работает. –

1

хорошо вы довольно близко. я бы рекомендовал использовать в reduce функцию

var sum = allNumbers.reduce(function(a,b){ return +a + +b; }, 0) 

plus signs перед а и Ь может выглядеть странно, но быстрый способ заставить строку в число в JavaScript

+1

Wow, унарный +, такие вопросы всегда привлекают 'parseInt (parseInt (parseInt (a) + parseInt (b))) ответы. – Oriol

+0

ahh унарный, это его имя. я отредактирую ссылку doc там, спасибо! – PhilVarg

+0

Хотя это правильно, мой первый инстинкт, когда мы видим это, - «все». Я предпочитаю более явный 'parseInt' для ясности. Мы не играем в гольф здесь. – Carcigenicate

0

Вы должны перебирать СВОЙ array, а затем измените каждую строку на число. После этого вы можете добавить все элементы в себя.

var a = 0; 
for(var i=0;i<newString.length;i++) { 
    a += parseInt(newString[i]);} 

А потом будет суммой

+0

Получение NaN в результате. – user1545463

+0

@ user1545463 Вероятно, это означает, что одна из строк, которые вы пытаетесь проанализировать, не может быть проанализирована как число. Убедитесь, что ни одна из ваших строк не имеет префикса с любыми символами без цифр. Вероятно, это '(' смотря на ваш пример. Вам нужно будет удалить круглые скобки. – Carcigenicate

+0

Правильно, это была проблема. Это то, что промежутки заполняются динамически, и я не могу удалить круглые скобки. Код Josh Sangers сделал трюк – user1545463