使用动态列的 JavaScript 数组排序 [重复]
Posted
技术标签:
【中文标题】使用动态列的 JavaScript 数组排序 [重复]【英文标题】:JavaScript Array Sort with Dynamic Column [duplicate] 【发布时间】:2019-09-28 04:07:39 【问题描述】:我有一些使用 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;
这样可以在参数中包含列名
【问题讨论】:
【参考方案1】:您可以通过对所需键使用闭包来反转该方法。
function sortBy(key)
return function (a, b)
return a[key].toLowerCase().localeCompare(b[key].toLowerCase());
;
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;
【讨论】:
这也是超级漂亮的代码,我非常喜欢它【参考方案2】:方括号表示法:
var arg01 = res01[colName].toLowerCase();
var arg02 = res02[colName].toLowerCase();
【讨论】:
【参考方案3】:使用[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;
【讨论】:
【参考方案4】:像下面这样使用方括号
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;
【讨论】:
哇,我是个白痴,非常感谢,有这么好的简单答案真是一种解脱,我会尽快接受这个答案 @TheLovelySausage - 很高兴为您提供帮助!以上是关于使用动态列的 JavaScript 数组排序 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript学习(六十六)—字符串对象常用的属性和方法总结以及数组元素的排序问题