Saya memiliki array objek dan saya ingin membandingkan objek tersebut pada properti objek tertentu. Inilah array saya:
var myArray = [
{"ID": 1, "Cost": 200},
{"ID": 2, "Cost": 1000},
{"ID": 3, "Cost": 50},
{"ID": 4, "Cost": 500}
]
Saya ingin membidik secara spesifik "biaya" dan mendapatkan nilai minimum dan maksimum. Saya menyadari bahwa saya bisa mengambil nilai biaya dan mendorongnya ke dalam array javascript dan kemudian menjalankan Fast JavaScript Max / Min .
Namun, adakah cara yang lebih mudah untuk melakukan ini dengan melewati langkah array di tengah dan menonaktifkan properti objek (dalam hal ini "Biaya") secara langsung?
javascript
arrays
compare
dipecat
sumber
sumber
lowest=highest=myArray[0]
dan kemudian memulai loop pada 1.myArray[0].Cost
. Tapi, jika tidak ada elemen pertama, kesalahan akan muncul. Jadi, pemeriksaan tambahan diperlukan, mungkin membatalkan peningkatan kinerja kecil.var lowestObject; for (...)
danif (tmp < lowest) { lowestObject = myArray[i]; lowest = tmp; }
Mengurangi bagus untuk hal-hal seperti ini: untuk melakukan operasi agregat (seperti min, max, avg, dll.) Pada larik objek, dan mengembalikan satu hasil:
... atau Anda dapat menentukan fungsi dalam itu dengan sintaks fungsi ES6:
Jika Anda ingin menjadi lucu, Anda dapat melampirkan ini ke array:
Sekarang Anda bisa mengatakan:
Harap dicatat bahwa jika Anda berniat untuk menggunakan ini, tidak ada pemeriksaan penuh untuk setiap situasi. Jika Anda meneruskan larik tipe primitif, itu akan gagal. Jika Anda memeriksa properti yang tidak ada, atau jika tidak semua objek berisi properti itu, Anda akan mendapatkan elemen terakhir. Versi ini sedikit lebih besar, tetapi memiliki pemeriksaan tersebut:
sumber
prev.Cost
akan ditentukan? Atau apakah itu dimulai sebagai 0?Gunakan
sort
, jika Anda tidak peduli tentang larik yang sedang dimodifikasi.sumber
myArray
, yang mungkin tidak diharapkan.O(nlog(n))
O(n)
Gunakan
Math
fungsi dan ambil nilai yang Anda inginkanmap
.Ini jsbinnya:
https://jsbin.com/necosu/1/edit?js,console
MEMPERBARUI:
Jika Anda ingin menggunakan ES6:
sumber
apply
. Katakan saja -Math.min(...myArray.map(o => o.Cost))
untuk menemukan minimum danMath.max(...myArray.map(o => o.Cost))
untuk menemukan maksimum.Saya pikir jawaban Rob W benar-benar benar (+1), tetapi hanya untuk kesenangan: jika Anda ingin menjadi "pintar", Anda dapat melakukan sesuatu seperti ini:
atau jika Anda memiliki struktur yang sangat bersarang, Anda bisa sedikit lebih fungsional dan melakukan hal berikut:
Ini bisa dengan mudah dikawinkan menjadi bentuk yang lebih berguna / spesifik.
sumber
untuk Max
untuk min
sumber
Coba (
a
adalah larik,f
adalah bidang untuk dibandingkan)Tampilkan cuplikan kode
sumber
Menggunakan Array.prototype.reduce () , Anda dapat menyambungkan fungsi komparator untuk menentukan item min, max, dll. Dalam sebuah array.
sumber
Menggunakan
Math.min
danMath.max
:sumber
Ini solusi yang lebih baik
sumber
Menambahkan ke jawaban Tristan Reid (+ menggunakan es6), Anda dapat membuat fungsi yang menerima panggilan balik, yang akan berisi operator yang ingin Anda terapkan
prev
dancurr
:Kemudian Anda cukup menyebutnya menggunakan:
sumber
Ini bisa dicapai dengan lodash
minBy
danmaxBy
fungsinya.Lodash
minBy
danmaxBy
dokumentasiLarutan
sumber
1, cara asli java-script
2, pertama urutkan objek kemudian mudah untuk mendapatkan min max dari objek yang diurutkan
sumber
Untuk solusi yang ringkas dan modern, seseorang dapat melakukan
reduce
operasi di atas larik, dengan melacak nilai minimum dan maksimum saat ini, sehingga larik hanya diulangi sekali (yang optimal).Demo:
Tampilkan cuplikan kode
sumber
Jawaban lainnya, mirip dengan jawaban Kennebec, tetapi semuanya dalam satu baris:
sumber
Anda dapat menggunakan objek Array bawaan untuk menggunakan Math.max / Math.min sebagai gantinya:
sumber