2016-01-16 2 views
0

Я пытаюсь вычислить стандартное отклонение набора данных, введенных пользователем, в форму с динамически добавленными входами. До сих пор мне удалось вычислить сумму элементов в массиве, но я не могу понять, как квадратировать каждый элемент массива. Я искал этот форум, но попытки предложения из единственного применимого результата (Square each number in an array in javascript), похоже, не работали. Вот отрывок из моего кода:Скважирование каждого числа в массиве с динамически добавленными входами

$(".calcSD").click(function() { 
     $("input[type=text]").each(function() { 
     arr.push($(this).val().trim() || 0); 
     sum += parseInt($(this).val().trim() || 0); 
     }); 

Где .calcSD кнопка пользователь нажимает кнопку, чтобы выполнить расчет. Более того, длина массива задается var number = arr.sort().filter(Boolean).length;, так как сценарий предназначен для фильтрации любых входов, которые остались пустыми.

Кроме того, если внести изменения, входы динамически добавляются в массив с помощью:

$('.multi-field-wrapper').each(function() { 
    var $wrapper = $('.multi-fields', this); 
    $(".add-field", $(this)).unbind('click').click(function(e) { 
    $('.multi-field:first-child', $wrapper).clone(true).appendTo($wrapper).find('input').val('').focus(); 
    }); 

Так я спрашиваю: как бы об определении площади каждого элемента в результирующем массиве?

ответ

1

Метод pow() возвращает значение х в степень у (х^у)

|| в parseInt будет использовать базу, как 0 если она возвращает falsey значение

$(".calcSD").click(function() { 
 
    var sum = 0; 
 
    var arr=[]; 
 
    $("input[type=text]").each(function() { 
 
    var squared = Math.pow(parseInt(this.value)||0, 2); 
 
    arr.push(squared); 
 
    sum += squared; 
 
    }); 
 
    alert(sum); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> 
 
<input type="text"> 
 
<input type="text"> 
 
<button class="calcSD">Calculate</button>

+0

Довольно много работает! Я использовал это вместо: 'parseInt ($ (this) .val(). Trim() || 0)'. Благодаря! – newbie2015

+0

'' 'селектор не имеет смысла здесь, и он будет работать без' trim' во всех случаях. Я рад, что это помогло :) – Rayon

0

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

$(".calcSD").click(function() { 
     $("input[type=text]").each(function() { 
     arr.push(($(this).val()*$(this).val()).trim() || 0); 
     sum += parseInt($(this).val().trim() || 0); 
}); 
+0

'arr.push (...). Trim()' будет вызывать ошибку , Предложите получить значение и обрезать его один раз и вставить в переменную и проверить, действительно ли это – charlietfl

0

В конце концов, я хотел, чтобы иметь возможность подвести квадратов элементов в массиве (как часть вычисления SD), так что я сделал это, и она работает:

var sumXsq = 0;  
for(var i = 0 ; i <= number ; i++) { 
    sumXsq += parseInt(arr[i]*arr[i]); 
} 

но не так хорошо, как ответ Района.

Смежные вопросы