Saya punya objek berikut menggunakan AJAX dan menyimpannya dalam array:
var homes = [
{
"h_id": "3",
"city": "Dallas",
"state": "TX",
"zip": "75201",
"price": "162500"
}, {
"h_id": "4",
"city": "Bevery Hills",
"state": "CA",
"zip": "90210",
"price": "319250"
}, {
"h_id": "5",
"city": "New York",
"state": "NY",
"zip": "00010",
"price": "962500"
}
];
Bagaimana cara membuat fungsi untuk mengurutkan objek berdasarkan price
properti hanya dalam urutan naik atau turun menggunakan JavaScript?
javascript
arrays
sorting
TomHankers
sumber
sumber
Jawaban:
Urutkan rumah berdasarkan harga dengan urutan menaik:
Atau setelah versi ES6:
Beberapa dokumentasi dapat ditemukan di sini .
sumber
string1.localeCompare(string2)
untuk perbandingan stringlocaleCompare()
case- sensitive . Jika Anda ingin peka huruf besar-kecil, Anda dapat menggunakannya(string1 > string2) - (string1 < string2)
. Nilai boolean dipaksa untuk integer 0 dan 1 untuk menghitung perbedaannya.localeCompare()
dokumentasi menunjukkan bahwa Anda dapat secara eksplisit menyatakan apakah Anda ingin sensitivitas huruf, penyortiran angka, dan opsi lainnya.Berikut adalah versi yang lebih fleksibel, yang memungkinkan Anda untuk membuat fungsi pengurutan yang dapat digunakan kembali, dan mengurutkan berdasarkan bidang apa pun.
sumber
sort_by
berjalan di O (1), dan mengembalikan fungsi yang digunakan oleh sort bawaan (O (N log N)) untuk membandingkan item dalam daftar. Kompleksitas totalnya adalah O (n log n) * O (1) yang mereduksi menjadi O (n log n), atau sama dengan quick sort.var key = primer ? function (x) { return primer(x[field]); } : function (x) { return x[field]; }
[1,-1][+!!reverse]
terlihat keren, itu hal yang mengerikan untuk dilakukan. Jika seorang pengguna tidak dapat memanggil metode Anda dengan benar, menghukumnya, tidak mencoba untuk membuatnya masuk akal, apa pun yang terjadi.Untuk mengurutkannya, Anda perlu membuat fungsi komparator dengan mengambil dua argumen. Kemudian panggil fungsi sortir dengan fungsi komparator sebagai berikut:
Jika Anda ingin mengurutkan, ganti ekspresi di setiap sisi tanda minus.
sumber
untuk penyortiran string jika seseorang membutuhkannya,
sumber
Jika Anda memiliki browser yang sesuai dengan ES6, Anda dapat menggunakan:
Perbedaan antara urutan urutan naik dan turun adalah tanda nilai yang dikembalikan oleh fungsi perbandingan Anda:
Berikut cuplikan kode yang berfungsi:
sumber
Anda ingin mengurutkannya dalam Javascript, bukan? Yang Anda inginkan adalah
sort()
fungsinya . Dalam hal ini Anda perlu menulis fungsi komparator dan meneruskannyasort()
, jadi kira-kira seperti ini:Komparator Anda mengambil salah satu dari masing-masing hash bersarang di dalam array dan memutuskan mana yang lebih tinggi dengan memeriksa bidang "harga".
sumber
Saya merekomendasikan GitHub: Array sortBy - implementasi
sortBy
metode terbaik yang menggunakan transformasi SchwartzianTetapi untuk sekarang kita akan mencoba pendekatan ini Gist: sortBy-old.js .
Mari kita membuat metode untuk mengurutkan array yang dapat mengatur objek dengan beberapa properti.
Menciptakan fungsi penyortiran
Pengaturan data yang tidak disortir
Menggunakannya
Atur array, dengan
"date"
sebagaiString
Jika Anda ingin mengabaikan case sensitif, atur
parser
callback:Jika Anda ingin mengonversi
"date"
bidang sebagaiDate
tipe:Di sini Anda dapat bermain dengan kode: jsbin.com/lesebi
Berkat @Ozesh dengan umpan baliknya, masalah terkait properti dengan nilai falsy telah diperbaiki.
sumber
var checkNaN = function (value) { return Number.isNaN(Number(value)) ? 0 : value; }
diikuti oleh: fungsi pengembalian (array, o) { .... a = _getItem.call (o, a); a = checkNaN (a); b = _getItem.call (o, b); b = checkNaN (b); return o.desc * (a <b? -1: + (a> b)); });Gunakan lodash.sortBy , (instruksi menggunakan commonjs, Anda juga dapat cukup menaruh skrip-tag untuk cdn di bagian atas html Anda)
Urutan menurun
Urutan naik
sumber
const sortBy = require('lodash/sortBy'); let calendars = sortBy(calendarListResponse.items, cal => cal.summary);
import { orderBy } from 'lodash'; ... ... return orderBy ( rows, 'fieldName' ).reverse();
Ini bisa dicapai melalui fungsi satu baris valueof () sederhana . Jalankan cuplikan kode di bawah ini untuk melihat demo.
sumber
Saya sedikit terlambat untuk pesta tetapi di bawah ini adalah logika saya untuk menyortir.
sumber
Sementara saya sadar bahwa OP ingin mengurutkan susunan angka, pertanyaan ini telah ditandai sebagai jawaban untuk pertanyaan serupa tentang string. Untuk itu, jawaban di atas tidak mempertimbangkan untuk menyortir array teks di mana casing penting. Sebagian besar jawaban mengambil nilai string dan mengubahnya menjadi huruf besar / kecil dan kemudian mengurutkan satu atau lain cara. Persyaratan yang saya patuhi sederhana:
Yang saya harapkan hanyalah
[ A, a, B, b, C, c ]
jawaban di atas kembaliA, B, C, a, b, c
. Saya benar-benar menggaruk kepala saya lebih lama dari yang saya inginkan (itulah sebabnya saya memposting ini dengan harapan akan membantu setidaknya satu orang lain). Sementara dua pengguna menyebutkanlocaleCompare
fungsi di komentar untuk jawaban yang ditandai, saya tidak melihat itu sampai setelah saya menemukan fungsi saat mencari-cari. Setelah membaca dokumentasi String.prototype.localeCompare () saya dapat menemukan ini:Ini memberitahu fungsi untuk mengurutkan nilai huruf besar sebelum nilai huruf kecil. Parameter kedua dalam
localeCompare
fungsi adalah untuk menentukan lokal tetapi jika Anda membiarkannya sebagaiundefined
secara otomatis menentukan lokal untuk Anda.Ini berfungsi sama untuk mengurutkan array objek juga:
sumber
Anda dapat menggunakan
sort
metode JavaScript dengan fungsi callback:sumber
Berikut ini adalah puncak dari semua jawaban di atas.
Validasi biola: http://jsfiddle.net/bobberino/4qqk3/
sumber
Untuk mengurutkan array, Anda harus mendefinisikan fungsi komparator. Fungsi ini selalu berbeda pada pola atau urutan penyortiran yang Anda inginkan (yaitu naik atau turun).
Mari kita buat beberapa fungsi yang mengurutkan array naik atau turun dan yang berisi objek atau string atau nilai numerik.
Sortir angka (menurut abjad dan naik):
Sortir angka (menurut abjad dan turun):
Sortir angka (secara numerik dan naik):
Sortir angka (secara numerik dan menurun):
Seperti di atas gunakan metode sorterPriceAsc dan sorterPriceDes dengan array Anda dengan kunci yang diinginkan.
sumber
Saya juga bekerja dengan semacam pemeringkatan dan beberapa bidang:
Hasil
sumber
Meskipun sedikit berlebihan untuk hanya mengurutkan satu array, fungsi prototipe ini memungkinkan untuk mengurutkan array Javascript dengan tombol apa saja, dalam urutan naik atau turun, termasuk kunci bersarang , menggunakan
dot
sintaks.Pemakaian:
Menyortir berdasarkan properti bersarang dengan dot-sintaks atau sintaks-array:
Mengurutkan berdasarkan beberapa kunci:
Anda dapat membayar repo: https://github.com/eneko/Array.sortBy
sumber
sortBy
sintaksis yang ringkas. Mudah digunakan –bahkan dengan bidang bersarang– sambil mempertahankan keterbacaan kode yang bagus. Terima kasih!Dengan ECMAScript 6, jawaban StoBor dapat dilakukan dengan lebih ringkas:
sumber
Urutan harga menurun:
Urutan harga naik:
sumber
Jika Anda menggunakan Underscore.js , coba sortBy:
sumber
Berikut ini adalah versi implementasi elegan yang sedikit dimodifikasi dari buku "JavaScript: The Good Parts".
CATATAN : Versi
by
ini stabil . Ini menjaga urutan jenis pertama saat melakukan jenis rantai berikutnya.Saya telah menambahkan
isAscending
parameter untuk itu. Juga dikonversi keES6
standar dan bagian "baru" yang baik seperti yang direkomendasikan oleh penulis.Anda bisa mengurutkan naik dan turun serta mengurutkan rantai berdasarkan beberapa properti.
sumber
{"first":"Curly","last":"Howard", "property" : {"id" : "1"}}
jenis array berdasarkan id?by
dengan nama = "properti", nestedName = "id"Hanya untuk array normal dari nilai elemen:
Untuk berbagai objek:
sumber
Buat fungsi dan urutkan berdasarkan input menggunakan kode di bawah ini
sumber
Anda dapat menggunakan string1.localeCompare (string2) untuk perbandingan string
Perhatikan bahwa
localCompare
case dalam sensitifsumber
Untuk mengurutkan pada beberapa objek objek array. Masukkan nama bidang Anda dalam
arrprop
array seperti["a","b","c"]
lalu masukkan parameter keduaarrsource
sumber aktual yang ingin kami urutkan.sumber
Anda akan membutuhkan dua fungsi
Kemudian Anda bisa menerapkan ini pada properti objek apa pun:
sumber
Baru-baru ini saya menulis fungsi universal untuk mengelola ini untuk Anda jika Anda ingin menggunakannya.
sumber
sumber
Hai setelah membaca artikel ini, saya membuat sortComparator untuk kebutuhan saya, dengan fungsionalitas untuk membandingkan lebih dari satu atribut json, dan saya ingin membaginya dengan Anda.
Solusi ini hanya membandingkan string dalam urutan menaik, tetapi solusinya dapat dengan mudah diperluas untuk setiap atribut yang didukung: pemesanan terbalik, tipe data lainnya, untuk menggunakan lokal, casting, dll.
dan hasilnya
dan jenis lainnya
dengan hasil
sumber
Kode sederhana:
sumber
http://yazilimsozluk.com/sort-array-in-javascript-by-asc-or-desc
sumber