js数组排序不能正常工作

js array sort not working properly

我正在对一组对象进行排序,但我的评估中有些东西运行不正常。任何见解都会非常有帮助,我开始在圈子里工作。

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);
  });

我只能假设您正在尝试做的是从每个值中提取第一个数字并进行比较,但如果是这样,您就做错了。如果匹配,a[0]b[0] 将生成整个匹配值。

您对 Regex 的使用也比需要的更复杂。

试试这个:

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];
});

仅供参考(旁注)- 在排序比较函数中使用 return condition ? -1 : -1; 几乎总是错误的。如果两个值的顺序相等,则函数需要 return 0。忽视这样做可能会导致不正确的结果、低效的行为,或者如果你真的不走运,会导致无限循环。

试试这个:

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;