排序以字母开头的数组字符串
Sort array string which begins with a letter
我如何对这个数组列表进行排序以确保所有以 _
开头的文件排在第一位?
Context:用于加载程序,我想确保首先加载所有带有 _
的文件。
列表是通过扫描随机生成的,所以我永远无法确定顺序。
0:"js\game\global\app.js"
1:"js\game\global\camera.js"
2:"js\game\global\displayGroups.js"
3:"js\game\global\dataBase.js"
4:"js\game\global\mouse.js"
5:"js\game\global\loaders.js"
6:"js\game\global\stage.js"
7:"js\game\global\polyfill.js"
8:"js\game\scenes\scene_boot.js"
9:"js\game\scenes\scene_IntroVideo.js"
10:"js\game\scenes\scene_loader.js"
11:"js\game\scenes\scene_Map1.js"
12:"js\game\scenes\_scene_base.js" //need to be alway first
13:"js\game\scenes\scene_Title.js"
所以在这个例子中,排序后,文件 _scene_base
应该排在第一位。
这是我的测试代码,但是显示不稳定,我不知道为什么,有时它不起作用。
files.sort((a,b) => {return a.indexOf("\_")>-1?-files.indexOf(a):0 });
对不起,如果我的英语很差。
如果您想任何以下划线开头的文件按顺序排在第一位,过滤并连接它。
const arr = ['js\game\global\app.js',
'js\game\global\camera.js',
'js\game\global\displayGroups.js',
'js\game\global\dataBase.js',
'js\game\global\mouse.js',
'js\game\global\loaders.js',
'js\game\global\stage.js',
'js\game\global\polyfill.js',
'js\game\scenes\scene_boot.js',
'js\game\scenes\scene_IntroVideo.js',
'js\game\scenes\scene_loader.js',
'js\game\scenes\scene_Map1.js',
'js\game\scenes\_scene_base.js',
'js\game\scenes\scene_Title.js'
]
const _files = arr.filter(e => e.indexOf('\_') !== -1).sort()
const files = arr.filter(e => e.indexOf('\_') === -1).sort()
const arr2 = _files.concat(files)
console.log(arr2)
您可以简单地替换下划线进行排序并将此字符串置于目录顶部。
var array = ["js\game\global\app.js", "js\game\global\camera.js", "js\game\global\displayGroups.js", "js\game\global\dataBase.js", "js\game\global\mouse.js", "js\game\global\loaders.js", "js\game\global\stage.js", "js\game\global\polyfill.js", "js\game\scenes\scene_boot.js", "js\game\scenes\scene_IntroVideo.js", "js\game\scenes\scene_loader.js", "js\game\scenes\scene_Map1.js", "js\game\scenes\_scene_base.js", "js\game\scenes\scene_Title.js"]
array.sort((a, b) => a.replace(/_/g, ' ').localeCompare(b.replace(/_/g, ' ')));
console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }
只需使用 Array.sort()
传递您自己的自定义比较器并使用 String.startWith()
检查文件名是否以“_”开头:
请尝试以下操作:
let arr =['js\game\global\app.js', 'js\game\global\camera.js', 'js\game\global\displayGroups.js', 'js\game\global\dataBase.js', 'js\game\global\mouse.js', 'js\game\global\loaders.js', 'js\game\global\stage.js', 'js\game\global\polyfill.js', 'js\game\scenes\scene_boot.js', 'js\game\scenes\scene_IntroVideo.js', 'js\game\scenes\scene_loader.js', 'js\game\scenes\scene_Map1.js', 'js\game\scenes\_scene_base.js', 'js\game\scenes\scene_Title.js' ];
arr.sort((a,b)=>{
let str1Array = a.split("\");
let str2Array = b.split("\");
return str2Array[str2Array.length-1].startsWith("_") -str1Array[str1Array.length-1].startsWith("_")
});
console.log(arr);
另一种基于indexOf
的解决方案,并且只有下划线的第一个位置。
const arr = [
'js\game\global\app.js',
'js\game\global\camera.js',
'js\game\global\displayGroups.js',
'js\game\global\dataBase.js',
'js\game\global\mouse.js',
'js\game\global\loaders.js',
'js\game\global\stage.js',
'js\game\global\polyfill.js',
'js\game\scenes\scene_boot.js',
'js\game\scenes\scene_IntroVideo.js',
'js\game\scenes\scene_loader.js',
'js\game\scenes\scene_Map1.js',
'js\game\scenes\scene_Title.js',
'js\game\scenes\_scene_base.js',
'js\game\scenes\scene_Loader.js',
'js\game\scenes\_scenebase.js',
'js\game\scenes\sceneTit_le.js',
'js\game\scenes\scene_introVide_o.js',
'js\game\scenes\sceneIntroVi_deo.js',
];
arr.sort((a, b) => {
const ai = a.indexOf('_');
const bi = b.indexOf('_');
return (ai > -1 && bi > -1 && (ai - bi)) || -1;
});
console.log(arr)
我如何对这个数组列表进行排序以确保所有以 _
开头的文件排在第一位?
Context:用于加载程序,我想确保首先加载所有带有 _
的文件。
列表是通过扫描随机生成的,所以我永远无法确定顺序。
0:"js\game\global\app.js"
1:"js\game\global\camera.js"
2:"js\game\global\displayGroups.js"
3:"js\game\global\dataBase.js"
4:"js\game\global\mouse.js"
5:"js\game\global\loaders.js"
6:"js\game\global\stage.js"
7:"js\game\global\polyfill.js"
8:"js\game\scenes\scene_boot.js"
9:"js\game\scenes\scene_IntroVideo.js"
10:"js\game\scenes\scene_loader.js"
11:"js\game\scenes\scene_Map1.js"
12:"js\game\scenes\_scene_base.js" //need to be alway first
13:"js\game\scenes\scene_Title.js"
所以在这个例子中,排序后,文件 _scene_base
应该排在第一位。
这是我的测试代码,但是显示不稳定,我不知道为什么,有时它不起作用。
files.sort((a,b) => {return a.indexOf("\_")>-1?-files.indexOf(a):0 });
对不起,如果我的英语很差。
如果您想任何以下划线开头的文件按顺序排在第一位,过滤并连接它。
const arr = ['js\game\global\app.js',
'js\game\global\camera.js',
'js\game\global\displayGroups.js',
'js\game\global\dataBase.js',
'js\game\global\mouse.js',
'js\game\global\loaders.js',
'js\game\global\stage.js',
'js\game\global\polyfill.js',
'js\game\scenes\scene_boot.js',
'js\game\scenes\scene_IntroVideo.js',
'js\game\scenes\scene_loader.js',
'js\game\scenes\scene_Map1.js',
'js\game\scenes\_scene_base.js',
'js\game\scenes\scene_Title.js'
]
const _files = arr.filter(e => e.indexOf('\_') !== -1).sort()
const files = arr.filter(e => e.indexOf('\_') === -1).sort()
const arr2 = _files.concat(files)
console.log(arr2)
您可以简单地替换下划线进行排序并将此字符串置于目录顶部。
var array = ["js\game\global\app.js", "js\game\global\camera.js", "js\game\global\displayGroups.js", "js\game\global\dataBase.js", "js\game\global\mouse.js", "js\game\global\loaders.js", "js\game\global\stage.js", "js\game\global\polyfill.js", "js\game\scenes\scene_boot.js", "js\game\scenes\scene_IntroVideo.js", "js\game\scenes\scene_loader.js", "js\game\scenes\scene_Map1.js", "js\game\scenes\_scene_base.js", "js\game\scenes\scene_Title.js"]
array.sort((a, b) => a.replace(/_/g, ' ').localeCompare(b.replace(/_/g, ' ')));
console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }
只需使用 Array.sort()
传递您自己的自定义比较器并使用 String.startWith()
检查文件名是否以“_”开头:
请尝试以下操作:
let arr =['js\game\global\app.js', 'js\game\global\camera.js', 'js\game\global\displayGroups.js', 'js\game\global\dataBase.js', 'js\game\global\mouse.js', 'js\game\global\loaders.js', 'js\game\global\stage.js', 'js\game\global\polyfill.js', 'js\game\scenes\scene_boot.js', 'js\game\scenes\scene_IntroVideo.js', 'js\game\scenes\scene_loader.js', 'js\game\scenes\scene_Map1.js', 'js\game\scenes\_scene_base.js', 'js\game\scenes\scene_Title.js' ];
arr.sort((a,b)=>{
let str1Array = a.split("\");
let str2Array = b.split("\");
return str2Array[str2Array.length-1].startsWith("_") -str1Array[str1Array.length-1].startsWith("_")
});
console.log(arr);
另一种基于indexOf
的解决方案,并且只有下划线的第一个位置。
const arr = [
'js\game\global\app.js',
'js\game\global\camera.js',
'js\game\global\displayGroups.js',
'js\game\global\dataBase.js',
'js\game\global\mouse.js',
'js\game\global\loaders.js',
'js\game\global\stage.js',
'js\game\global\polyfill.js',
'js\game\scenes\scene_boot.js',
'js\game\scenes\scene_IntroVideo.js',
'js\game\scenes\scene_loader.js',
'js\game\scenes\scene_Map1.js',
'js\game\scenes\scene_Title.js',
'js\game\scenes\_scene_base.js',
'js\game\scenes\scene_Loader.js',
'js\game\scenes\_scenebase.js',
'js\game\scenes\sceneTit_le.js',
'js\game\scenes\scene_introVide_o.js',
'js\game\scenes\sceneIntroVi_deo.js',
];
arr.sort((a, b) => {
const ai = a.indexOf('_');
const bi = b.indexOf('_');
return (ai > -1 && bi > -1 && (ai - bi)) || -1;
});
console.log(arr)