js数组排序不正常

时间:2015-01-12 20:17:05

标签: javascript ecmascript-6

我正在对一组对象进行排序,但我的评估中的某些内容无法正常工作。任何见解都会非常有用,我开始在圈子里工作。

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

2 个答案:

答案 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;