others - javaScript动态列的数组排序

我有一些使用JavaScript数组排序的代码,但是,看起来很低效。

我有一个像下面这样定义的对象数组


dummyData = [];


dummyData.push({ col01:"aa", col02:"ac", col03:"ab" });


dummyData.push({ col01:"ab", col02:"ab", col03:"ac" });


dummyData.push({ col01:"ac", col02:"aa", col03:"aa" });



这样我就可以使用这样的函数对col01进行排序


function f_sort_col01(dataArg) {



 dataArg.sort(function(res01, res02) {


 var arg01 = res01.col01.toLowerCase();


 var arg02 = res02.col01.toLowerCase();


 if(arg01 < arg02) { return -1; }


 if(arg01 > arg02) { return 1; }


 return 0;


 });



 return dataArg;



}



这个工作的不错,但是,问题是当我需要对不同的列进行排序时,我必须创建一个新的函数,


function f_sort_col02(dataArg) {



 dataArg.sort(function(res01, res02) {


 var arg01 = res01.col02.toLowerCase();


 var arg02 = res02.col02.toLowerCase();


 if(arg01 < arg02) { return -1; }


 if(arg01 > arg02) { return 1; }


 return 0;


 });



 return dataArg;



}



这只是在不同的列上。 我想知道是否可以沿着这条路做一些事情


function f_sort(dataArg, colName) {



 dataArg.sort(function(res01, res02) {


 var arg01 = res01.colName.toLowerCase();


 var arg02 = res02.colName.toLowerCase();


 if(arg01 < arg02) { return -1; }


 if(arg01 > arg02) { return 1; }


 return 0;


 });



 return dataArg;



}



以便列的名称可以包含在参数中

时间:

使用如下方括号


function f_sort(dataArg, colName) {



 dataArg.sort(function(res01, res02) {


 var arg01 = res01[colName].toLowerCase();


 var arg02 = res02[colName].toLowerCase();


 if(arg01 < arg02) { return -1; }


 if(arg01 > arg02) { return 1; }


 return 0;


 });


 return dataArg;


}



你可以通过在所需键上使用闭包来反转该方法。


function sortBy(key) {


 return function (a, b) {


 return a[key].toLowerCase().localeCompare(b[key].toLowerCase());


 };


}



// usage


var data = [{ col01: "aa", col02: "ac", col03: "ab" }, { col01: "ab", col02: "ab", col03: "ac" }, { col01: "ac", col02: "aa", col03: "aa" }];



console.log(data.sort(sortBy('col01')));


console.log(data.sort(sortBy('col02')));


console.log(data.sort(sortBy('col03')));
.as-console-wrapper { max-height: 100% !important; top: 0; }

使用[colName]而不是.colName


function f_sort(dataArg, colName) {



 dataArg.sort(function(res01, res02) {


 var arg01 = res01[colName].toLowerCase();


 var arg02 = res02[colName].toLowerCase();


 if(arg01 < arg02) { return -1; }


 if(arg01 > arg02) { return 1; }


 return 0;


 });



 return dataArg;



}



方括号符号:


var arg01 = res01[colName].toLowerCase();


var arg02 = res02[colName].toLowerCase();



...