Aşağıdaki işlev, bir nesneyi bir veya birden çok özellik üzerinde, her bir özellik üzerinde artan (varsayılan) veya azalan olarak sıralamanıza ve büyük / küçük harfe duyarlı karşılaştırmalar yapıp yapmayacağınızı seçmenize olanak tanır. Varsayılan olarak, bu işlev büyük / küçük harfe duyarlı olmayan türler gerçekleştirir.
İlk argüman nesneleri içeren dizi olmalıdır. Sonraki bağımsız değişken (ler), sıralamak için farklı nesne özelliklerine başvuran virgülle ayrılmış dizeler listesi olmalıdır. Son argüman (isteğe bağlı), büyük / küçük harfe duyarlı türlerin gerçekleştirilip gerçekleştirilmeyeceğini seçmek için bir boole değeridir - büyük / true
küçük harfe duyarlı türler için kullanın .
İşlev, varsayılan olarak her özelliği / anahtarı artan düzende sıralar. Eğer azalan düzende sıralamak için belirli bir anahtar istiyorsanız, o zaman onun yerine bu formatta bir dizi geçmek: ['property_name', true]
.
Burada işlevin bazı örnek kullanımları ve ardından bir açıklama ( homes
nesneleri içeren bir dizi):
objSort(homes, 'city')
-> şehre göre sırala (artan, büyük / küçük harfe duyarlı)
objSort(homes, ['city', true])
-> şehre göre sırala (azalan, büyük / küçük harfe duyarlı)
objSort(homes, 'city', true)
-> şehre göre sırala fiyat (artan, büyük / küçük harfe duyarlı )
objSort(homes, 'city', 'price')
-> şehre ve sonra fiyata göre sırala (her ikisi de artan, büyük / küçük harfe duyarlı)
objSort(homes, 'city', ['price', true])
-> şehre göre sırala (artan) sonra fiyat (azalan), büyük / küçük harfe duyarlı)
Ve daha fazla uzatmadan, işte fonksiyon:
function objSort() {
var args = arguments,
array = args[0],
case_sensitive, keys_length, key, desc, a, b, i;
if (typeof arguments[arguments.length - 1] === 'boolean') {
case_sensitive = arguments[arguments.length - 1];
keys_length = arguments.length - 1;
} else {
case_sensitive = false;
keys_length = arguments.length;
}
return array.sort(function (obj1, obj2) {
for (i = 1; i < keys_length; i++) {
key = args[i];
if (typeof key !== 'string') {
desc = key[1];
key = key[0];
a = obj1[args[i][0]];
b = obj2[args[i][0]];
} else {
desc = false;
a = obj1[args[i]];
b = obj2[args[i]];
}
if (case_sensitive === false && typeof a === 'string') {
a = a.toLowerCase();
b = b.toLowerCase();
}
if (! desc) {
if (a < b) return -1;
if (a > b) return 1;
} else {
if (a > b) return -1;
if (a < b) return 1;
}
}
return 0;
});
} //end of objSort() function
Ve işte bazı örnek veriler:
var homes = [{
"h_id": "3",
"city": "Dallas",
"state": "TX",
"zip": "75201",
"price": 162500
}, {
"h_id": "4",
"city": "Bevery Hills",
"state": "CA",
"zip": "90210",
"price": 1000000
}, {
"h_id": "5",
"city": "new york",
"state": "NY",
"zip": "00010",
"price": 1000000
}, {
"h_id": "6",
"city": "Dallas",
"state": "TX",
"zip": "85000",
"price": 300000
}, {
"h_id": "7",
"city": "New York",
"state": "NY",
"zip": "00020",
"price": 345000
}];