2016-09-25 1 views
0

Так я иметь эту функцию:Javascript пользовательских сортировки вопрос

function sortJSFiles(files) { 
var src = []; 
var vendor = []; 

files.forEach(function(item) { 
    if (item.indexOf('src/') > -1) { 
     src.push(item); 
    } else { 
     vendor.push(item); 
    } 
}); 

src.sort(function (a, b) { 
    function replaceCB(r, a, i) { return r.replace(a, i); } 

    var replace = ['noctis.js', 'noctis.ctrl.js', '.module.js', '.ctrl.js']; 

    return replace.reduce(replaceCB, a).localeCompare(replace.reduce(replaceCB, b)); 
}); 

return vendor.concat(src);} 

Что в основном рода JS файлы в моем определенном порядке, но проблема в том, что существуют involded JS в каталогах тоже и те нагрузки, во-первых, которые я не, например:

Running "index:build" (index) task[ 
'vendor/angular/angular.min.js', 
'vendor/angular-material/angular-material.min.js', 
'vendor/angular-animate/angular-animate.min.js', 
'vendor/angular-aria/angular-aria.min.js', 
'vendor/angular-messages/angular-messages.min.js', 
'vendor/angular-ui-router/release/angular-ui-router.min.js', 
'vendor/moment/min/moment.min.js', 
'vendor/angular-moment/angular-moment.min.js', 
'templates-common.js', 
'templates-app.js', 
'src/app/noctis.js', 
'src/app/noctis.ctrl.js', 
'src/app/account/account.js', 
'src/app/account/dashboard/characters/characters.js', 
'src/app/account/dashboard/characters/detail/detail.js', 
'src/app/account/dashboard/dashboard.js', 
'src/app/account/dashboard/dashboard.ctrl.js', 
'src/app/account/dashboard/panels/admin.ctrl.js', 
'src/app/account/dashboard/panels/users.ctrl.js', 
'src/app/account/donate/donate.js', 
'src/app/account/donate/donate.ctrl.js', 
'src/app/account/settings/settings.js', 
'src/app/account/settings/settings.ctrl.js', 
'src/app/account/vote/vote.js', 
'src/app/account/vote/vote.ctrl.js', 
'src/app/membership/dialogs/login.ctrl.js', 
'src/app/membership/dialogs/register.ctrl.js', 
'src/app/membership/dialogs/termsOfService.ctrl.js', 
'src/app/membership/membership.module.js', 
'src/app/news/news.js', 
'src/app/news/news.ctrl.js', 
'src/app/widgets/playersOnline/playersOnline.js', 
'src/app/widgets/rankings/rankings.js', 
'src/app/widgets/serverDetails/serverDetails.js', 
'src/common/directives/feeds/feeds.js', 
'src/common/directives/panel/panel.js'] 

Вы видите в каталоге членства, как правило, он должен быть загружен в первую очередь membership.js и чем JS из подкаталогов. Кто-нибудь может изменить мою функцию, чтобы добиться того, чего я хочу? Благодарю.

+0

"* обычно он должен быть загружен в первую очередь membership.js и чем JS из подкаталогов *" - почему можно было бы ожидать, что? ** d ** ialogs <** m ** загрязнение. Если вы каким-то образом хотите обрабатывать свои предметы специально как пути, вам придется делать это явно и не использовать стандартное сравнение строк. – Bergi

+0

Значит, это должно быть как member.module.js для загрузки сначала перед диалоговыми окнами js – allocen

+0

Также как и все остальные, например, вы находитесь в папке X, и у этого есть основной JS, а также есть в подкаталогах другие js тоже и независимо от порядка алфавита, что js в корневой папке всегда должен загружаться первым. Вы понимаете? – allocen

ответ

0

Не алфавитный, но по крайней мере теперь файлы в подкаталогах загружаются позже.

var dependencies = ["src/common/directives/panel/panel.js", "src/app/account/dashboard/characters/detail/detail.js", "src/app/account/account.js", "src/app/noctis.js", "vendor/angular-messages/angular-messages.min.js", "src/app/account/dashboard/characters/characters.js", "vendor/angular/angular.min.js", "src/app/account/dashboard/panels/users.ctrl.js", "src/app/account/dashboard/dashboard.js", "templates-common.js", "src/app/membership/dialogs/login.ctrl.js", "src/common/directives/feeds/feeds.js", "vendor/angular-moment/angular-moment.min.js", "src/app/membership/dialogs/register.ctrl.js", "src/app/widgets/rankings/rankings.js", "src/app/widgets/playersOnline/playersOnline.js", "src/app/news/news.js", "src/app/membership/dialogs/termsOfService.ctrl.js", "src/app/account/donate/donate.js", "src/app/news/news.ctrl.js", "src/app/account/settings/settings.ctrl.js", "src/app/account/donate/donate.ctrl.js", "src/app/membership/membership.module.js", "src/app/account/settings/settings.js", "src/app/account/vote/vote.js", "vendor/angular-ui-router/release/angular-ui-router.min.js", "vendor/angular-material/angular-material.min.js", "vendor/angular-aria/angular-aria.min.js", "src/app/noctis.ctrl.js", "vendor/moment/min/moment.min.js", "vendor/angular-animate/angular-animate.min.js", "src/app/account/dashboard/dashboard.ctrl.js", "templates-app.js", "src/app/account/dashboard/panels/admin.ctrl.js", "src/app/widgets/serverDetails/serverDetails.js", "src/app/account/vote/vote.ctrl.js"] 
 

 
var src = dependencies.filter(function isVendor(dep) { 
 
    return dep.startsWith("src/"); 
 
}); 
 

 
src.sort(function(a, b) { 
 
    var depth = a.split("/").length - b.split("/").length; 
 
    var postFixNr = a.split(".") - b.split("."); 
 
    return depth === 0 ? 
 
    postFixNr === 0 ? 
 
    a.localeCompare(b) : postFixNr : depth; 
 
}); 
 

 
console.log(src);