2016-04-13 22 views
2

Bir gulp akışına özel bir sıralama karşılaştırıcısı uygulamayı deniyorum (bu nedenle diziyi özelleştirebilme özelliğim yok). Tek bir paylaşımlı dosya dışında alfabetik olarak her şeyi sıralamaya çalışıyorum.Bir dizinin en tepesine öğe ekleme

Basit bir jsbin test çalışıyor olsa da, aynı sorunu görüyorum - üstte ihtiyacım olan dosya doğru sıralama değil. Elde edilen çıkış yanlış

var files = [ 
    'app/modules/t.css', 
    'app/shared/dialogs/c.css', 
    'app/shared/directives/m.css', 
    'app/shared/scss/app.css', 
    'app/shared/modals/a.css', 
    'app/shared/modals/b.css' 
]; 

files.sort(function(file1, file2) { 
    var sort = 0; 

    if (file1.indexOf('shared/scss') > -1) { 
    sort = -1; 
    } else { 
    sort = file1.localeCompare(file2); 
    } 

    return sort; 
}); 

, app/shared/scss/app.css sadece iki kez yükseldi.

"app/modules/t.css" 
"app/shared/dialogs/c.css" 
"app/shared/directives/m.css" 
"app/shared/scss/app.css" 
"app/shared/modals/a.css" 
"app/shared/modals/b.css" 

İşte Beklediğim ne:

"app/shared/scss/app.css" 
"app/modules/t.css" 
"app/shared/dialogs/c.css" 
"app/shared/directives/m.css" 
"app/shared/modals/a.css" 
"app/shared/modals/b.css" 
+2

Kişisel karşılaştırma bozuldu; Ya dosya2'nin bu yolu varsa? – SLaks

+0

Ah Bunu şimdi fark ettim de ... doh! Bu doğru cevap. – helion3

cevap

0

Eh, file1app/shared/scss/app.css içerebilecek tek değişken değildir, aynı zamanda file2 var. Sıralama fonksiyonunuzda sadece file1 kontrol ediyorsunuz. file1shared/scss içeriyorsa kontrol ediyoruz, fakat file2 bunu içeriyorsa kontrol etmediğinizde

files.sort((file1, file2) => { 
    let sort = 0, substring = "shared/scss"; 
    if (file1.includes(substring)) { 
     sort = -1; 
    } 
    else if (file2.includes(substring)) { 
     sort = 1; 
    } 
    else { 
     sort = file1.localeCompare(file2); 
    } 
    return sort; 
}); 
0

:

Yani, şekilde çalışmalıdır bu tür işlevi istediği gibi. Başka bir koşul ekleyin, file2.indexOf('shared/scss') > -1 ve bu doğruysa, file2 öğesinin üstte görünmesini sağlamak için sort değerini 1 olarak ayarlayın.

var files = [ 
    'app/modules/t.css', 
    'app/shared/dialogs/c.css', 
    'app/shared/directives/m.css', 
    'app/shared/scss/app.css', 
    'app/shared/modals/a.css', 
    'app/shared/modals/b.css' 
]; 

files.sort(function(file1, file2) { 
    var sort = 0; 
    if (file1.indexOf('shared/scss') > -1) { 
    sort = -1; 
    } else if (file2.indexOf('shared/scss') > -1) { 
    sort = 1; 
    } else { 
    sort = file1.localeCompare(file2); 
    } 

    return sort; 
}); 
0

Bu, 'shared/scss' değerini en üste hareket ettiren bir öneridir.

var files = ['app/modules/t.css', 'app/shared/dialogs/c.css', 'app/shared/directives/m.css', 'app/shared/scss/app.css', 'app/shared/modals/a.css', 'app/shared/modals/b.css']; 
 

 
files.sort(function (a, b) { 
 
    var aa = +!a.match(/shared\/scss/), 
 
     bb = +!b.match(/shared\/scss/); 
 
    return aa - bb || a.localeCompare(b); 
 
}); 
 
document.write('<pre> ' + JSON.stringify(files, 0, 4) + '</pre>');

İlgili konular