Sim*_*one 5 javascript arrays sorting parameter-passing
该方法
我正在尝试创建一个自定义方法,该方法将使用我选择的参数对数组对象进行排序。
例如,我有以下数组...
var albumList = [
{ value: 'A 2011', count: '18' },
{ value: 'Z 2012', count: '22' },
{ value: 'C 2012', count: '7' },
{ value: 'H 2013', count: '21' }
// etc...
];
Run Code Online (Sandbox Code Playgroud)
我设法按“值”按字母顺序对这个数组进行排序,但功能有限。
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);
}
Run Code Online (Sandbox Code Playgroud)
然后通过调用albumList.alphaSort();一切正常。但是,我将其称为有限的原因是我无法确定数组将要排序的参数。默认情况下它是“值”,因为它已在上面的第二个代码片段中设置。
基本上,我想要做的是让类似的东西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;
Run Code Online (Sandbox Code Playgroud)
换句话说,我需要传递一个我可以随时实现的参数/参数;因此,我可以轻松处理因以后的更改而产生的任何错误。在这种情况下,比较逻辑将是......
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');
Run Code Online (Sandbox Code Playgroud)
显然,这不会将“sortParameter”传递给compare函数,并且compare(a,b)不会接受任何其他参数。
可能重复
这对我有用:
Array.prototype.alphaSort = function (sortParameter) {
function compare(a, b) {
function isNumeric(num){
return !isNaN(num)
}
// convert string to numbers if necessary:
// http://stackoverflow.com/questions/175739/is-there-a-built-in-way-in-javascript-to-check-if-a-string-is-a-valid-number
var left = (isNumeric(a[sortParameter])) ? +a[sortParameter] : a[sortParameter];
var right = (isNumeric(b[sortParameter])) ? +b[sortParameter] : b[sortParameter];
if (left < right)
return -1;
if (left > right)
return 1;
return 0;
}
this.sort(compare);
}
var albumList = [
{ value: 'A 2011', count: '18' },
{ value: 'Z 2012', count: '22' },
{ value: 'C 2012', count: '7' },
{ value: 'H 2013', count: '21' }
];
albumList.alphaSort('count');
console.log(albumList);
Run Code Online (Sandbox Code Playgroud)
在 Javascript 中,您可以使用 obj.value 以及 obj[value] 获取对象值。