我有一个数组的值。我用一个条件对它进行排序,以保持某些项目在顶部。到目前为止,这是有效的。现在我想运行两个条件,例如,我有两个前缀要与数组中的每个项相匹配:tableprefix和第二个daryprefix。我已经实现的是将tableprefix保持在顶部。其余的项目必须按字母顺序排序。
我想要达到的目标:
1:数组项匹配表前缀在最顶部//已经实现
2:与secondaryprefix匹配的数组项位于tableprefix//之后,无法识别
3:按字母顺序对其余项目进行排序//已完成
数组:
columns = [
"es_officer_name",
"es_officer_fname",
"es_officer_apply_status",
"es_officer_dob",
"es_wl_1_11_test_id",
"es_officer_id",
"es_designation_id",
"es_wl_1_11_test_edit_date",
"es_designation_title",
"es_employment_type_id",
"es_employment_type_name",
"es_service_type_id",
"es_service_type_name",
"es_wl_1_11_test_added_date",
"es_bps_id",
"es_bps_title",
"es_department_id",
"es_department_name"
];
前缀:
var tablePrefix = "es_wl";
排序算法:
columns.sort(function(a, b)
{
if (a.indexOf(tablePrefix))
{
if (b.indexOf(tablePrefix))
{
return a.localeCompare(b);
}
else
{
return 1;
}
}
else
{
if (b.indexOf(tablePrefix))
{
return -1;
}
else
{
return 0; // All prefixed are considered equal
}
}
});
排序结果:
[
"es_wl_1_11_test_id",
"es_wl_1_11_test_edit_date",
"es_wl_1_11_test_added_date",
"es_bps_id",
"es_bps_title",
"es_department_id",
"es_department_name",
"es_designation_id",
"es_designation_title",
"es_employment_type_id",
"es_employment_type_name",
"es_officer_apply_status",
"es_officer_dob",
"es_officer_fname",
"es_officer_id",
"es_officer_name",
"es_service_type_id",
"es_service_type_name"
]
现在,我想要的是将所有与tablePrefix“es_wl”
匹配的项目保留在最上面。但同时添加另一个前缀secondaryPrefix“es_-officer”
,以便所有匹配的项目都紧跟在“es_-wl”项目之后,然后按照通常的字母顺序排序。
我已经看了几个项目,并应用它,但项目甚至没有从他们的位置移动。我想我的逻辑是完全错误的,集成第二个前缀,保留第一个前缀,然后进行排序。
您可以使用正则表达式来完成它。将数组变成字符串,搜索前缀的单词:
var str = columns.toString(); // Array to string
var prefix = "es_wl";
var regex = new RegExp(prefix + "[\\w]+,", "g"); // Word with the prefix
var res = str.match(regex).sort(); // The array with the words that starts with the desired prefix
使用多个前缀,您可以将它们放在一个数组中。遍历数组,使多个正则表达式,并将排序的数组放在一起。之后,删除字符串中带有所需前缀的单词,替换():
str = str.replace(regex, "");
总计:
columns = [
"es_officer_name",
"es_officer_fname",
"es_officer_apply_status",
"es_officer_dob",
"es_wl_1_11_test_id",
"es_officer_id",
"es_designation_id",
"es_wl_1_11_test_edit_date",
"es_designation_title",
"es_employment_type_id",
"es_employment_type_name",
"es_service_type_id",
"es_service_type_name",
"es_wl_1_11_test_added_date",
"es_bps_id",
"es_bps_title",
"es_department_id",
"es_department_name"
];
var prefix1 = "es_wl";
var prefix2 = "es_officer";
var prefix3 = "es_department";
var prefixes1 = [prefix1, prefix2];
var prefixes2 = [prefix2, prefix1, prefix3];
function makeCustomOrder(prefixes, arr) {
var str = columns.toString();
var res = [];
prefixes.forEach((pre, i) => {
var regex = new RegExp(pre + "[\\w]+,", "g");
res = res.concat(str.match(regex).sort());
str = str.replace(regex, ""); // Delete the words with the desired prefixes
});
res = res.concat(str.split(",").sort()); // Put the sorted rest to the result
return res;
}
var res = makeCustomOrder(prefixes1, columns);
var res2 = makeCustomOrder(prefixes2, columns);
console.log(res); // Example 1
console.log(res2); // Example 2
完成后,运行代码段。
var columns = [
"es_officer_name",
"es_officer_fname",
"es_officer_apply_status",
"es_officer_dob",
"es_wl_1_11_test_id",
"es_officer_id",
"es_designation_id",
"es_wl_1_11_test_edit_date",
"es_designation_title",
"es_employment_type_id",
"es_employment_type_name",
"es_service_type_id",
"es_service_type_name",
"es_wl_1_11_test_added_date",
"es_bps_id",
"es_bps_title",
"es_department_id",
"es_department_name"
];
var tablePrefix = "es_wl";
var secondTablePrefix = "es_officer"
columns.sort((function(firstPattern, SecondPattern) {
this.sorting = function(a, b, tablePrefix1, primarySort) {
if (a.indexOf(tablePrefix1) != -1) {
if (b.indexOf(tablePrefix1) != -1) {
return a.localeCompare(b);
} else {
return -1;
}
} else if (b.indexOf(tablePrefix1) != -1) {
return 1;
} else {
return primarySort ? 0 : a.localeCompare(b); // All prefixed are considered equal
}
}
return function(a, b) {
var result = sorting(a, b, firstPattern, 1);
if (result == 0) {
result = sorting(a, b, SecondPattern, 0);
}
return result;
}
})(tablePrefix, secondTablePrefix));
console.log(columns)
挑战任务 初始文件index-start.html中提供了一个无序列表元素,并在script标签中提供了一个字符串数组。请为这些字符串排序,要求去除字符串中的The,A以及An的前缀后再进行排序,并把排序后的结果作为列表项展示在无序列表中。 实现效果 基本思路 1.基本的编程任务有两个要点,即排序和展示; 2.数组排序部分最外层即为Array.sort(arr)函数,内层实现具体排序规则; 3.展
问题内容: 我有一个带有数字值的字符串键数组,可用于具有每个标签出现次数的标签列表中,因此: 这是为了我可以按降序显示标签列表,因此: 我可以使用 arsort 通过出色的值进行反向排序,但是我还希望具有相同数字值的所有标签都按字母顺序排序,因此最终结果可以是: 有办法可以做到吗?我猜想 usort 可能是要走的路,但是我看了php.net上的示例,我的眼睛呆呆了!非常感谢!!! 问题答案: 看一
问题内容: 我有一个形状为(N,2)的2D numpy数组,其中包含N个点(x和y坐标)。例如: 我想对它进行排序,以使我的点按x坐标排序,然后在x坐标相同的情况下按y排序。因此,上面的数组应如下所示: 如果这是正常的Python列表,我将简单地定义一个比较器来执行我想要的操作,但是据我所知,numpy的sort函数不接受用户定义的比较器。有任何想法吗? 编辑:感谢您的想法!我建立了一个具有100
问题内容: 我有一个列表,其中每个元素都是形式。例如,列表的元素可能看起来像这样。 我想通过以下条件对包含描述的元素类型的列表进行排序: 如果两个元素的整数列表(即)的长度不同,则整数列表较小的元素是较小的元素。 否则,如果整数列表的长度相同,则较小的元素是第一个整数的较小整数,这两个元素的整数列表都不同。例如: [[1,1,99,100],-1] <[[1,1,100,1],-1],因为99 <
如何搜索前面有数字值的排序arraylist,计划是我要用最大到最小的数字对listview进行排序
我在Java中有一个数组,其中包含一组随机日期: {2015年1月20日、2015年2月12日、2015年2月20日、2015年6月21日、2015年7月12日、2015年7月28日、2015年7月30日、2015年9月24日、2015年12月31日} 如何按月将此阵列拆分为多个阵列? 我想要 {2015年1月20日}、{2015年2月12日、2015年2月20日}、{2015年6月21日}、{2