【发布时间】:2013-10-29 13:11:04
【问题描述】:
方法
我正在尝试创建一个自定义方法,该方法将使用我选择的参数对数组对象进行排序。
例如,我有以下数组...
var albumList = [
{ value: 'A 2011', count: '18' },
{ value: 'Z 2012', count: '22' },
{ value: 'C 2012', count: '7' },
{ value: 'H 2013', count: '21' }
// etc...
];
我设法按“值”按字母顺序对这个数组进行排序,但功能有限。
Array.prototype.alphaSort = function () {
function compare(a, b) {
if (a.value < b.value) // sorting by 'count'
return -1;
if (a.value > b.value) // sorting by 'count'
return 1;
return 0;
}
this.sort(compare);
}
然后通过调用albumList.alphaSort(); 一切正常。然而,我之所以称它为受限,是因为我无法确定对数组进行排序所依据的参数。默认情况下它是 'value',因为它已在上面的第二个代码 sn-p 中设置。
基本上,我想做的是拥有类似albumList.alphaSort('count') 的东西,这将允许该函数根据'count'或我将来可能拥有的任何东西自动执行排序过程额外的键和值,而不是来回更改整个代码...
// .alphaSort('count') should be interpreted as follows
if (a.count < b.count) // sorting by 'value'
return -1;
if (a.count > b.count) // sorting by 'value'
return 1;
换句话说,我需要传递一个我可以随时实现的参数/参数;因此,我可以轻松处理因以后的更改而产生的任何错误。这样一来,比较逻辑就是……
a.MY_ARGUMENT < b.MY_ARGUMENT
我希望你明白我在寻找什么!
问题
作为一种尝试,为了清楚起见(尽管它没有任何意义),我做了如下......
Array.prototype.alphaSort = function (sortParameter) {
function compare(a, b) {
if (a.sortParameter < b.sortParameter)
return -1;
if (a.sortParameter > b.sortParameter)
return 1;
return 0;
}
this.sort(compare);
}
albumList.alphaSort('count');
显然,这不会将 'sortParameter' 传递给 compare 函数,而且,compare(a,b) 不会接受任何其他参数。
可能重复
Any way to extend javascript's array.sort() method to accept another parameter?
【问题讨论】:
-
恰如其分的“问题”,虽然 sortParameter 没有传递给 compare 函数,但是由于“closure”,compare 函数可以访问 sortParameter。您只需要将 a.sortParameter 更改为 a[sortParameter]。
标签: javascript arrays sorting parameter-passing