我正在对一组对象进行排序,但我的评估中的某些内容无法正常工作。任何见解都会非常有用,我开始在圈子里工作。
temp = [{name: 'M12-20'}, {name: 'M20-25'}];
a[field] = "M12-20"
b[field] = "M20-25"
temp.sort(function(a, b) {
var one = /[MFP]\d{2}/.exec(a[field]) || /[MFP]\d{1}/.exec(a[field]);
var two = /[MFP]\d{2}/.exec(b[field]) || /[MFP]\d{1}/.exec(b[field]);
return ( one[0] > two[0] ? 1 : -1);
});
答案 0 :(得分:2)
我只能假设你要做的是从每个值中提取第一个数字并进行比较,但如果是这样,你就会做错了。如果匹配,a[0]
和b[0]
将生成整个匹配值。
您对正则表达式的使用也比它需要的更复杂。
试试这个:
var temp = [{name: 'M12-20'}, {name: 'M20-25'}],
field = 'name',
r = /[MFP](\d\d?)/;
temp.sort(function(a, b) {
var one = r.exec(a[field]) || [,NaN],
two = r.exec(b[field]) || [,NaN];
return one[1] - two[1];
});
FYI(附注) - 在排序比较功能中使用return condition ? -1 : -1;
几乎总是错误的。如果两个值按顺序相等,则函数需要返回0
。忽视这样做会导致错误的结果,低效的行为,或者如果你真的不走运,那就是无限循环。
答案 1 :(得分:-2)
试试这个:
var temp=[];
temp[1]="Apple";
temp[2]="Orange";
temp[3]="Banana";
temp.sort(function(a, b) {
return return (a < b) ? 1 : -1;
});
来自:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
if (a is less than b by some ordering criterion) {
return -1;
}
if (a is greater than b by the ordering criterion) {
return 1;
}
// a must be equal to b
return 0;