2016-04-14 12 views
1

en ÖyleLo-çizgi sıralama dizi dize değerine dayalı

var outer = [ 
    { 
    "name": "T1", 
    "inner": [ 
     { 
     "type": "DAY" 
     }, 
     { 
     "type": "MONTH" 
     }, 
     { 
     "type": "WEEKLY" 
     } 
    ] 
    }, 
    { 
    "name": "T2", 
    "inner": [ 
     { 
     "type": "DAY" 
     }, 
     { 
     "type": "MONTH" 
     }, 
     { 
     "type": "WEEKLY" 
     } 
    ] 
    } 
]; 

Ben temelde iç dizide nesneleri sıralamak çalışıyorum gibi nesneler dizisi var diyelim ki 'türü 'bu sırayla - AYLIK, HAFTALIK, GÜN. Bunun gibi.

"inner": [ 
      { 
      "type": "MONTH" 
      }, 
      { 
      "type": "WEEKLY" 
      }, 
      { 
      "type": "DAY" 
      } 
     ] 

Bunu Lo-dash kullanarak yapmak için bir yol var mı? Bunun için bir small fiddle.

similar question here gördüm, ancak bu tam olarak aradığım şey değildi çünkü benim durumumda, sipariş düzeltilecek ve sıralama rasgele bir dize değerine dayalı olmayacaktır.

+0

(TJ Crowder'ın :) sayesinde) daha temiz bir yaklaşım değil mi? Bağladığınız soruya verilen yanıtlar açıkça, 'Array # sort' (başka bir yerde de belgelenmiş) nasıl kullanılacağını gösterir. Peki, ne denedin? Bir tür geri aramada gerekli olan her şey, ilk şey ikinci saniyeden önce olsaydı sıfırdan geri dönmek, 0 aynıysa ve ilk şey ikinci saniyeden sonra gelirse sıfırdan büyüktür. –

+0

Array # sort kullanarak elde ettiğim sorun, bana artan veya azalan bir sipariş vermesidir. Ancak, önceden tanımlanmış bir sıra kullanarak nesneleri nasıl sıralayacağımı hala bilmiyorum. Ben bu [burada cevap] (http://stackoverflow.com/questions/979256/sorting-an-array-of-javascript-objects). – Rodiwa

+0

Yani doğru değeri nasıl iade edeceğinizi öğreniyorsunuz. –

cevap

2

bu

var priority = [ "MONTH", "WEEKLY", "DAY" ]; 

outer.forEach(function(obj){ 
    obj.inner.sort(function(a,b){ 
    var ap = priority.indexOf(a.type); 
    var bp = priority.indexOf(b.type); 
    return ap-bp; 
    }); 
}); 

alternatif approcah denemek ve sana takılıp kalırlar

var priority = {MONTH: 0, WEEKLY: 1, DAY: 2}; 

outer.forEach(function(obj){ 
    obj.inner.sort(function(a,b){ 
    var ap = priority[a.type]; 
    var bp = priority[b.type]; 
    return ap-bp; 
    }); 
}); 
+0

Evet, işe yarıyor. Ancak, bunu sadece lodash ile yapmak için bir yolu var mı? Bunun için _.sortBy kullanabilir miyim? – Rodiwa

+2

Dizeleri değerlerle eşlemek istiyorsanız, bir nesne daha anlamlı olur mu? 'var priority = {MONTH: 0, HAFTALIK: 1, GÜN: 2};' ve sonra da öncelik [a] - önceliği [b]; ' –

+0

@Misaal: Neden zaten inşa edilmiş bir şeyi yapmak için bir kütüphane fonksiyonuna ulaşırsınız -içinde? –

İlgili konular