Saya mengalami masalah dalam menambahkan semua elemen array serta rata-rata keluar. Bagaimana saya melakukan ini dan menerapkannya dengan kode yang saya miliki saat ini? Elemen seharusnya didefinisikan seperti yang saya miliki di bawah ini.
<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
jonathan miller
sumber
sumber
var elmt = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
akan jauh lebih baik.Jawaban:
Hanya beralih melalui array, karena nilai Anda adalah string, mereka harus dikonversi ke integer terlebih dahulu. Dan rata-rata hanyalah jumlah nilai yang dibagi dengan jumlah nilai.
sumber
for(var i = 0; i < elmt.length; i++;)
denganfor(var i = 0, l = elmt.length; i < l; i++)
sum += parseInt(elmt[i], 10);
mengasumsikan elmt [i] adalah dari basis 10. tautanSolusi yang saya anggap lebih elegan:
sumber
sum/times.length
langkah ini):var avg = times.reduce(function(p,c,i){return p+(c-p)/(i+1)},0);
times.reduce((a,b) => (a+b)) / times.length;
ES6
sumber
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
.Menghitung rata-rata (rata-rata) menggunakan pengurangan dan ES6:
sumber
umumnya rata-rata menggunakan pengurangan satu-liner adalah seperti ini
khusus untuk pertanyaan yang diajukan
versi yang efisien seperti
Memahami Mengurangi Array Javascript dalam 1 Menit http://www.airpair.com/javascript/javascript-array-reduce
seperti yang ditunjukkan oleh Gotofritz tampaknya Array.reduce melewatkan nilai yang tidak ditentukan. jadi di sini adalah perbaikannya:
sumber
elements.length!=0?elements.length:1
dapat juga ditulis seperti ini:elements.length || 1
yang lebih pendek, dan lebih mudah dibaca.Bayangkan kita memiliki array bilangan bulat seperti ini:
Rata-rata diperoleh dengan rumus berikut
A = (1 / n) Σxi (dengan i = 1 ke n) ... Jadi: x1 / n + x2 / n + ... ... xn / n
Kami membagi nilai saat ini dengan jumlah nilai dan menambahkan hasil sebelumnya ke nilai yang dikembalikan.
Tanda tangan metode pengurangan adalah
Fungsi mengurangi panggilan balik mengambil parameter berikut:
Parameter reduksi kedua adalah nilai default ... (Digunakan jika array kosong ).
Jadi metode pengurangan rata-rata adalah:
Jika mau, Anda dapat membuat fungsi terpisah
Dan kemudian cukup merujuk ke tanda tangan metode panggilan balik
Atau menambah prototipe Array secara langsung ..
Dimungkinkan untuk membagi nilai setiap kali metode pengurangan dipanggil ..
Atau bahkan lebih baik , menggunakan Array.protoype.sum () yang didefinisikan sebelumnya
metode, mengoptimalkan proses saya memanggil divisi hanya sekali :)
Kemudian pada objek array apa pun dari ruang lingkup:
NB: array kosong dengan mengembalikan harapan NaN lebih benar daripada 0 dalam sudut pandang saya dan dapat berguna dalam kasus penggunaan tertentu.
sumber
Anda juga dapat menggunakan lodash , _.sum (array) dan _.mean (array) di bagian Math (juga memiliki hal-hal praktis lainnya).
sumber
Bukan yang tercepat, tetapi yang terpendek dan dalam satu baris menggunakan map () & kurangi ():
sumber
[7,14,21].reduce((avg,e,i,arr)=>avg+e/arr.length,0);
tetapi dengan perilaku berbeda pada array kosong. Jika Anda ingin hasilnya kosong pada array kosong:[].reduce((a,e,i,arr)=>(a?a:0)+e/arr.length,"")
for (var avg = 0, length = i = arr.length; i--;) avg += arr[i] / length
Jauh lebih jelas, lebih pendek dan lebih cepatSalah satu cara licik Anda bisa melakukannya walaupun memang membutuhkan penggunaan (yang paling dibenci) eval ().
Hanya berpikir saya akan memposting ini sebagai salah satu opsi 'di luar kotak'. Anda tidak pernah tahu, kecerdikan mungkin memberi Anda (atau menghilangkan) satu poin.
sumber
eval()
masalah yang mungkin saya lihat adalah Anda perlu memastikan array berisi angka saja (yang tentu saja juga berlaku untuk semua jawaban lain di sini). Entri non-numerik macet denganReferenceError
atauSyntaxError, except nested arrays of numbers which introduce
, `menyebabkan total numerik salah. Dan tentu saja di sisi server JS, misalnya node.js, maka secara alamieval()
mungkin memperkenalkan masalah keamanan. Tapi ini terlihat sempurna untuk penggunaan sisi klien yang terstruktur dengan baik.eval()
seperti ini - lihat bagian kinerja nczonline.net/blog/2013/06/25/eval-isnt-evil-just-misunderstoodSaya menggunakan metode ini di perpustakaan pribadi saya:
EDIT: Untuk menggunakannya, cukup tanyakan jumlah atau rata-rata array, seperti:
sumber
Di browser ES6-ready , polyfill ini mungkin bisa membantu.
Anda dapat berbagi metode panggilan yang sama antara
Math.sum
,Math.avg
danMath.max
, sepertiAnda dapat menggunakan Math.sum sebagai
atau jika Anda memiliki array untuk diringkas, Anda dapat menggunakan
seperti
sumber
Array.prototype
, saya pikir menambahkan tema keMath
objek adalah pilihan yang lebih baik - mereka semua "penangan angka".Berikut ini adalah tambahan cepat ke objek "Math" di javascript untuk menambahkan perintah "rata-rata" ke dalamnya !!
Maka saya memiliki tambahan ini ke objek "Matematika" untuk mendapatkan jumlah!
Jadi semua yang Anda lakukan adalah
Dan di mana saya meletakkan array placeholder hanya lewat di variabel Anda (Input jika mereka angka bisa menjadi string karena itu parsing ke angka!)
sumber
atur loop counter Anda ke 0 .... Anda mendapatkan elemen 9 dan kemudian selesai seperti sekarang. Jawaban lainnya adalah matematika dasar. Gunakan variabel untuk menyimpan jumlah Anda (perlu memberikan string ke ints), dan bagi dengan panjang array Anda.
sumber
Mulailah dengan mendefinisikan semua variabel yang kami rencanakan untuk digunakan. Anda akan mencatat bahwa untuk
numbers
array, saya menggunakan notasi literal yang[]
bertentangan dengan metode konstruktorarray()
. Selain itu, saya menggunakan metode yang lebih pendek untuk mengatur beberapa variabel menjadi 0.Selanjutnya saya mengisi array angka kosong saya dengan nilai 0 hingga 11. Ini untuk membawa saya ke titik awal semula. Perhatikan bagaimana saya mendorong ke array
count++
. Ini mendorong nilai hitungan saat ini, dan kemudian meningkatkannya untuk waktu berikutnya.Terakhir, saya melakukan fungsi "untuk masing-masing" angka dalam array angka. Fungsi ini akan menangani satu angka pada satu waktu, yang saya identifikasi sebagai "n" di dalam tubuh fungsi.
Pada akhirnya, kita bisa menampilkan
sum
nilai, danavg
nilai ke konsol kita untuk melihat hasilnya:Lihat beraksi online di http://jsbin.com/unukoj/3/edit
sumber
Saya hanya membangun jawaban Abdennour TOUMI. berikut alasannya:
1.) Saya setuju dengan Brad, saya pikir itu bukan ide yang bagus untuk memperluas objek yang tidak kita buat.
2.)
array.length
tepat dapat diandalkan dalam javascript, saya lebih sukaArray.reduce
karenaa=[1,3];a[1000]=5;
sekaranga.length
akan kembali1001
.sumber
Kemudian :
sumber
Pada browser evergreen Anda dapat menggunakan fungsi panah
avg = [1,2,3].reduce((a,b) => (a+b);
Menjalankannya 100.000 kali, perbedaan waktu antara pendekatan for loop dan reduksi diabaikan.
sumber
console.time
&console.timeEnd
Average One Liner Terpendek:
Jumlah Terpendek Satu Liner:
sumber
Hanya untuk iseng:
sumber
Saya pikir kita bisa melakukannya
Saya menggunakan parseFloat dua kali karena ketika 1) Anda menambahkan (a) angka 9 + b ("1") maka hasilnya adalah "91" tetapi kami ingin penambahan. jadi saya menggunakan parseFloat
2) Ketika penambahan (a) 9 + parseFloat ("1") terjadi meskipun hasilnya akan "10" tetapi itu akan menjadi string yang tidak kita inginkan jadi saya menggunakan parseFloat lagi.
Saya harap saya jelas. Saran diterima
sumber
Inilah cara pemula saya hanya menemukan rata-rata. Semoga ini bisa membantu seseorang.
sumber
inilah satu liner Anda:
sumber
Saya pikir ini mungkin solusi langsung untuk menghitung rata-rata dengan for for loop dan function.
sumber
Tampaknya ada banyak solusi untuk ini, tetapi saya menemukan ini ringkas dan elegan.
Atau lebih tepatnya:
Bergantung pada browser Anda, Anda mungkin perlu melakukan panggilan fungsi eksplisit karena fungsi panah tidak didukung:
Atau:
sumber
Jika Anda membutuhkan rata-rata dan dapat melewati persyaratan penghitungan jumlah, Anda dapat menghitung rata-rata dengan satu panggilan pengurangan:
sumber
Jika ada yang membutuhkannya - Ini adalah rata-rata rekursif.
Dalam konteks pertanyaan awal, Anda mungkin ingin menggunakan rata-rata rekursif jika Anda mengizinkan pengguna untuk memasukkan nilai-nilai tambahan dan, tanpa menimbulkan biaya mengunjungi setiap elemen lagi, ingin "memperbarui" rata-rata yang ada.
Bagaimana:
ini berfungsi dengan mempertahankan rata-rata dan jumlah elemen saat ini. Ketika nilai baru akan dimasukkan, Anda menambah hitungan dengan 1, skala rata-rata yang ada oleh
(count-1) / count
, dan tambahkannewValue / count
rata-rata.Manfaat:
Kerugian:
BigNumber
sumber
Rata-rata konten HTML itens
Dengan jQuery atau Javascript,
querySelector
Anda memiliki akses langsung ke data yang diformat ... Contoh:Jadi, dengan jQuery yang Anda miliki
Lihat 4 cara (!) Lainnya untuk mengakses itens dan rata-rata: http://jsfiddle.net/4fLWB/
sumber
var arr = [1,2,3,4,5]
rata-rata (arr) ====== >>>> 3
Ini berfungsi dengan string sebagai angka atau angka dalam array.
sumber
sumber
Saya akan merekomendasikan D3 dalam hal ini. Ini adalah yang paling mudah dibaca (dan menyediakan 2 jenis rata-rata)
sumber