Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按多个前缀排序数组_Javascript_Sorting - Fatal编程技术网

Javascript 按多个前缀排序数组

Javascript 按多个前缀排序数组,javascript,sorting,Javascript,Sorting,我有一个带值的数组。我对它进行分类,有一个条件,就是要将某些项目保持在顶部。到目前为止,这是有效的。现在我想运行两个条件,例如,我有两个前缀要与数组中的每个项匹配:tableprefix和secondaryprefix。我已经取得的成就是将tableprefix保持在首位。其余的项目必须按字母顺序排序 我想要实现的目标: columns = [ "es_officer_name", "es_officer_fname", "es_officer_apply_status",

我有一个带值的数组。我对它进行分类,有一个条件,就是要将某些项目保持在顶部。到目前为止,这是有效的。现在我想运行两个条件,例如,我有两个前缀要与数组中的每个项匹配:tableprefix和secondaryprefix。我已经取得的成就是将tableprefix保持在首位。其余的项目必须按字母顺序排序

我想要实现的目标:

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"
]
1:在最顶端匹配tableprefix的数组项//已实现

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"
]
前缀:

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"
]
排序算法:

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"
]
排序结果:

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列=[
“官员姓名”,
“高级职员姓名”,
“高级职员申请状态”,
“这是我的长官”,
“es_wl_1_11_测试id”,
“警察身份证”,
“es_标识”,
“es_wl_1_11_测试_编辑_日期”,
“名称”,
“就业类型id”,
“就业类型名称”,
“es_服务类型_id”,
“服务类型名称”,
“已添加测试日期”,
“es_bps_id”,
“es_bps_标题”,
“es_部门id”,
“部门名称”
];
var tablePrefix=“es_wl”;
var secondTablePrefix=“高级职员”
columns.sort((函数(firstPattern,SecondPattern){
this.sorting=函数(a、b、tablePrefix1、primarySort){
如果(a.indexOf(tablePrefix1)!=-1){
如果(b.indexOf(tablePrefix1)!=-1){
返回a.localeCompare(b);
}否则{
返回-1;
}
}else if(b.indexOf(tablePrefix1)!=-1){
返回1;
}否则{
返回primarySort?0:a.localeCompare(b);//所有前缀都被视为相等
}
}
返回函数(a,b){
var结果=排序(a、b、firstPattern,1);
如果(结果==0){
结果=排序(a、b、第二模式,0);
}
返回结果;
}
})(tablePrefix,secondTablePrefix));
log(columns)
您可以使用。将数组设置为字符串,搜索带有前缀的单词:

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
使用多个前缀,可以将它们放入一个数组中。循环遍历数组,将多个正则表达式和已排序的数组放在一起。之后,删除字符串中带有所需前缀的单词,并使用:

总计:

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"
]
列=[
“官员姓名”,
“高级职员姓名”,
“高级职员申请状态”,
“这是我的长官”,
“es_wl_1_11_测试id”,
“警察身份证”,
“es_标识”,
“es_wl_1_11_测试_编辑_日期”,
“名称”,
“就业类型id”,
“就业类型名称”,
“es_服务类型_id”,
“服务类型名称”,
“已添加测试日期”,
“es_bps_id”,
“es_bps_标题”,
“es_部门id”,
“部门名称”
];
var prefix1=“es_wl”;
var prefix2=“高级职员”;
var prefix3=“es_部门”;
变量prefixes1=[prefix1,prefix2];
变量prefixes2=[prefix2,prefix1,prefix3];
函数makeCustomOrder(前缀、arr){
var str=columns.toString();
var-res=[];
前缀.forEach((pre,i)=>{
var regex=new RegExp(pre+“[\\w]+,”,“g”);
res=res.concat(str.match(regex.sort());
str=str.replace(regex,“”;//删除带有所需前缀的单词
});
res=res.concat(str.split(,“”.sort());//将排序后的剩余部分放入结果中
返回res;
}
var res=makeCustomOrder(前缀1,列);
var res2=makeCustomOrder(前缀2,列);
console.log(res);//例1

console.log(res2);//例2
谢谢,它确实在对两个前缀进行排序,但它没有做第三项工作,对其余项目进行排序。对不起,起初我忽略了其余的元素我不知道为什么,但出于某种原因,每次我运行它时,我的浏览器中的顺序都会发生变化。它的顺序正确无误。请清除缓存并重试,或者以匿名方式打开它,然后重试。我看到了正确的顺序,我正在chrome上运行mac。让我们来看看。