2013-06-30 15 views
17

Asıl sorun için düzenleme bölümüne bakın.Bir boolean özelliğine göre nesnelerin sıralaması dizisi

[false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, true, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false] 

Bu sorta bir tür yapıyor:

a.sort(function(a,b){return !a && b}); 

Bu bana veriyor: eğer bunu yaparsam Sonra

a = [false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false] 

:

Tamam, bu senaryo var ... ama pek de değil ... :(

Bu diziyi nasıl sıralarım?

DÜZENLEME: Benim asıl dizi nesnelerin çünkü ben sadece a.sort (kullanmıyordu neden)

merak ediyorsanız, ben yayınlanmıştır gibi değil düz bir dizi. Gerçek bir benziyorsun öğesi vardır [{: true xx}, {xx: false}, ...]

+0

çalıştı b) {return a> b}); Ya işe yaramıyor ... Ben yanlış bir şey yapıyor olabilir düşünüyorum – PCoelho

+0

neden özel işlev yazmanız gerekiyor? a.sort() –

cevap

59

a = [false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]; 
 
    
 
    
 
    a.sort(function(x, y) { 
 
     // true values first 
 
     return (x === y)? 0 : x? -1 : 1; 
 
     // false values first 
 
     // return (x === y)? 0 : x? 1 : -1; 
 
    }); 
 
    
 
    console.log(a);

Sen 0 döndüğünüzde a ve her ikisine de sahip gerekir b Aynı değer, -1 eğer doğruysa ve diğer 1 ise.

+1

çalışmalıdır. Anladınız :) teşekkürler! (stackoverflow'un bana izin verdiği anda cevabınızı kabul edeceğim: P) – PCoelho

+13

Daha da kısa: a.sort (işlev (x, y) {return y - x}); –

+2

a.sort() hakkında ne dersiniz? ed: denedim, çalışıyor! – dandavis

15

daha basit bir yolu:

a = [{xx:true},{xx:false},{xx:true},{xx:false},{xx:true},{xx:false},{xx:true},{xx:false},{xx:true},{xx:false},{xx:true},{xx:false},{xx:true},{xx:false},{xx:true},{xx:false},{xx:true},{xx:false}]; 

a.sort(function(a,b){return a.xx-b.xx}); 

console.log(a); 

bunu başka bir şekilde sıralanmış isterseniz) sıralama (sonra a.reverse() çağırabilir ..

DÜZENLEME: updated soru yansıtacak şekilde düzenlenmiş Boole dizisi yerine bir dizi nesnenin sıralanması. , Sıralama (function (a.:

+0

Evet, a.sort() ile ilgili sorun nedir? –

+1

@PranavNegandhi: Sorun nedir, bir düzenleme yeniden tanımlanmadan önce soruyu yanıtladım ... – dandavis

+0

yine de cevabı güncelledi, bu yüzden insanlar bir testi kesip yapıştırabilir ... – dandavis

0

PFB çözümü ben a.map yaparsanız (function (x) {0? X 1 dönmek}), typescript açısal 2 de benim için

let a = [{aa:"1",xx:true},{aa:"10",xx:false},{aa:"2",xx:true},{aa:"11",xx:false},{aa:"3",xx:true},{aa:"12",xx:false},{aa:"4",xx:true},{aa:"13",xx:false},{aa:"5",xx:true},{aa:"14",xx:false},{aa:"6",xx:true},{aa:"15",xx:false},{aa:"7",xx:true},{aa:"16",xx:false},{aa:"8",xx:true},{aa:"17",xx:false},{aa:"9",xx:true},{aa:"18",xx:false}]; 

    //a.sort(function(a,b){return a.xx-b.xx}); 
    a.sort(function (x, y) { 
     // true values first 
     return (x.xx === y.xx) ? 0 : x ? -1 : 1; 
     // false values first 
     // return (x === y)? 0 : x? 1 : -1; 
    }); 
    return JSON.stringify(a); 
İlgili konular