У меня проблемы с добавлением всех элементов массива и их усреднением. Как бы я это сделал и реализовал с помощью кода, который у меня сейчас есть? Элементы должны быть определены, как у меня это ниже.
<script type="text/javascript">
//<![CDATA[
var i;
var elmt = new Array();
elmt[0] = "0";
elmt[1] = "1";
elmt[2] = "2";
elmt[3] = "3";
elmt[4] = "4";
elmt[5] = "7";
elmt[6] = "8";
elmt[7] = "9";
elmt[8] = "10";
elmt[9] = "11";
// Problem here
for (i = 9; i < 10; i++){
document.write("The sum of all the elements is: " + /* Problem here */ + " The average of all the elements is: " + /* Problem here */ + "<br/>");
}
//]]>
</script>
javascript
arrays
average
Джонатан Миллер
источник
источник
var elmt = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
было бы намного приятнее.Ответы:
Просто выполните итерацию по массиву, поскольку ваши значения являются строками, они должны быть сначала преобразованы в целое число. А среднее значение - это просто сумма значений, деленная на количество значений.
источник
for(var i = 0; i < elmt.length; i++;)
наfor(var i = 0, l = elmt.length; i < l; i++)
sum += parseInt(elmt[i], 10);
предположение, что elmt [i] имеет основание 10. ссылкаРешение, которое я считаю более элегантным:
источник
sum/times.length
шаге):var avg = times.reduce(function(p,c,i){return p+(c-p)/(i+1)},0);
times.reduce((a,b) => (a+b)) / times.length;
ES6
источник
Array.prototype.average = function () { var sum = 0, j = 0; for (var i = 0; i < this.length, isFinite(this[i]); i++) { sum += parseFloat(this[i]); ++j; } return j ? sum / j : 0; };
NaN
.Расчет среднего (среднего) с использованием снижения и ES6:
источник
как правило, среднее использование однострочного уменьшения выглядит следующим образом
конкретно на вопрос задал
эффективная версия похожа
Понять Javascript Array Уменьшить за 1 минуту http://www.airpair.com/javascript/javascript-array-reduce
как указывал gotofritz, кажется, Array.reduce пропускает неопределенные значения. так вот исправление:
источник
elements.length!=0?elements.length:1
также может быть написано так:elements.length || 1
что короче, и легче читать.Давайте представим, что у нас есть массив целых чисел:
Среднее получается по следующей формуле
A = (1 / n) Σxi (с i = 1 до n) ... Итак: x1 / n + x2 / n + ... + xn / n
Мы делим текущее значение на количество значений и добавляем предыдущий результат к возвращаемому значению.
Подпись метода Reduce
Функция сокращения обратного вызова принимает следующие параметры:
Второй параметр Reduce является значением по умолчанию ... (Используется, если массив пуст ).
Таким образом, средний метод уменьшения будет:
Если вы предпочитаете, вы можете создать отдельную функцию
А затем просто обратитесь к сигнатуре метода обратного вызова
Или увеличьте прототип Array напрямую ..
Можно делить значение каждый раз, когда вызывается метод Reduce.
Или даже лучше , используя ранее определенные Array.protoype.sum ()
метод, оптимизируй процесс моего вызова деления только один раз :)
Тогда на любом объекте Array области:
NB: пустой массив с возвращаемым желанием NaN является более правильным, чем 0, на мой взгляд, и может быть полезным в конкретных случаях использования.
источник
Вы также можете использовать lodash , _.sum (массив) и _.mean (массив) в части Math (также есть другие удобные вещи).
источник
Не самый быстрый, но самый короткий и в одну строку использует map () и redu ():
источник
[7,14,21].reduce((avg,e,i,arr)=>avg+e/arr.length,0);
но с другим поведением на пустом массиве. Если вы хотите, чтобы результат был пустым в пустом массиве:[].reduce((a,e,i,arr)=>(a?a:0)+e/arr.length,"")
for (var avg = 0, length = i = arr.length; i--;) avg += arr[i] / length
Намного яснее, короче и намного быстрееОдин хитрый способ сделать это, хотя это требует использования (очень ненавистного) eval ().
Просто подумал, что я опубликую это как один из тех вариантов «нестандартно». Вы никогда не знаете, хитрость может дать вам (или забрать) точку.
источник
eval()
проблема, которую я вижу, это то, что вы должны быть уверены, что массив содержит только цифры (что, конечно, также верно для всех остальных ответов здесь). Нечисловые записи завершаются с ошибкойReferenceError
илиSyntaxError, except nested arrays of numbers which introduce
, `вызывая неправильный числовой итог. И, конечно же, в JS на стороне сервера, например, node.js, естественно,eval()
могут возникнуть проблемы с безопасностью. Но это выглядит идеально для любого хорошо структурированного использования на стороне клиента.eval()
производительностью, включаемаяЯ использую эти методы в моей личной библиотеке:
РЕДАКТИРОВАТЬ: Чтобы использовать их, просто спросите массив для его суммы или среднего, например:
источник
В ES6-готовых браузерах этот polyfill может быть полезным.
Вы можете использовать один и тот же метод вызова между
Math.sum
,Math.avg
иMath.max
, например,Вы можете использовать Math.sum как
или если у вас есть массив для суммирования, вы можете использовать
как
источник
Array.prototype
я думаю, что добавление темы кMath
объекту - лучший выбор - все они являются «обработчиками чисел».Вот быстрое дополнение к объекту «Math» в javascript для добавления к нему «средней» команды !!
Тогда у меня есть это дополнение к объекту «Математика» для получения суммы!
Итак, все, что вы делаете, это
И где я помещаю массив местозаполнителя, просто передайте переменную (входные данные, если они являются числами, могут быть строкой, потому что она разбирается в число!)
источник
установите для счетчика цикла for значение 0 .... вы получаете элемент 9, а затем все готово, как сейчас. Другие ответы являются основными по математике. Используйте переменную для хранения вашей суммы (необходимо привести строки в целые числа) и разделите ее на длину массива.
источник
Начните с определения всех переменных, которые мы планируем использовать. Вы заметите, что для
numbers
массива я использую буквенную запись[]
в отличие от метода конструктораarray()
. Кроме того, я использую более короткий метод для установки нескольких переменных в 0.Затем я заполняю массив пустых чисел значениями от 0 до 11. Это должно привести меня к исходной исходной точке. Обратите внимание, как я толкаю на массив
count++
. Это подталкивает текущее значение счетчика, а затем увеличивает его в следующий раз.Наконец, я выполняю функцию «для каждого» из чисел в массиве чисел. Эта функция будет обрабатывать по одному номеру за раз, который я идентифицирую как «n» в теле функции.
В конце мы можем вывести как
sum
значение, так иavg
значение в нашу консоль, чтобы увидеть результат:Посмотрите это в действии онлайн на http://jsbin.com/unukoj/3/edit
источник
Я просто опираюсь на ответ Abdennour TOUMI. Вот причины, почему:
1.) Я согласен с Брэдом, я не думаю, что это хорошая идея расширить объект, который мы не создали.
2.)
array.length
точно надежен в javascript, я предпочитаюArray.reduce
beacusea=[1,3];a[1000]=5;
, сейчасa.length
вернусь1001
.источник
Затем :
источник
В вечнозеленых браузерах вы можете использовать функции стрелок
avg = [1,2,3].reduce((a,b) => (a+b);
Запустив его 100 000 раз, разница во времени между подходом цикла и сокращением незначительна.
источник
console.time
&console.timeEnd
Средний самый короткий лайнер:
Самая короткая сумма лайнера:
источник
Просто для удовольствия:
источник
Я думаю, что мы можем сделать как
Я использую parseFloat дважды, потому что, когда 1) вы добавляете (a) 9 + b («1») число, тогда результатом будет «91», но мы хотим добавить. так что я использовал parseFloat
2) Когда происходит добавление (a) 9 + parseFloat ("1"), хотя результатом будет "10", но это будет строка, которую мы больше не хотим, я использовал parseFloat.
Я надеюсь, что я чист. Предложения приветствуются
источник
Вот мой способ новичка просто найти в среднем. Надеюсь, это кому-нибудь поможет.
источник
вот ваш лайнер:
источник
Я думаю, что это может быть прямым решением для вычисления среднего значения с помощью цикла for и функции.
источник
Кажется, существует бесконечное количество решений для этого, но я нашел, что это было кратким и элегантным.
Или более точно:
В зависимости от вашего браузера вам может потребоваться выполнить явные вызовы функций, поскольку функции стрелок не поддерживаются:
Или:
источник
Если вам нужно среднее значение и вы можете пропустить требование расчета суммы, вы можете вычислить среднее значение с помощью одного вызова метода Reduce:
источник
Если кому-то это понадобится - вот рекурсивное среднее.
В контексте исходного вопроса вы можете использовать рекурсивное среднее, если вы разрешили пользователю вставлять дополнительные значения и, не неся при этом затрат на повторное посещение каждого элемента, хотели «обновить» существующее среднее.
Как:
это работает, поддерживая текущее среднее и количество элементов. Когда нужно добавить новое значение, вы увеличиваете счетчик на 1, масштабируете существующее среднее значение
(count-1) / count
и добавляетеnewValue / count
среднее значение.Преимущества:
Недостатки:
BigNumber
источник
Среднее HTML-контента
С jQuery или Javascript у
querySelector
вас есть прямой доступ к форматированным данным ... Пример:Итак, с JQuery у вас есть
Посмотрите другие 4 способа (!), Чтобы получить доступ к itens и усреднить его: http://jsfiddle.net/4fLWB/
источник
var arr = [1,2,3,4,5]
avg (обр) ====== >>>> 3
Это работает со строками как числа или числа в массиве.
источник
источник
Я бы порекомендовал D3 в этом случае. Это наиболее читаемый (и предоставляет 2 различных вида средних)
источник