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

Журнал консоли
Пример кода

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"]
-2
Jaitsujin 12 Янв 2017 в 03:29

3 ответа

Лучший ответ

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

// 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>
0
Josh Sanger 12 Янв 2017 в 00:42

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

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

И тогда будет сумма

0
Kornelia Kobiela 12 Янв 2017 в 00:38

Ну, ты довольно близко я бы рекомендовал использовать уменьшение функция

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

знаки плюс в Передняя часть a и b может выглядеть странно, но это быстрый способ привести строку в число в javascript

1
PhilVarg 12 Янв 2017 в 00:42