Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript js数组排序无法正常工作_Javascript_Ecmascript 6 - Fatal编程技术网

Javascript js数组排序无法正常工作

Javascript js数组排序无法正常工作,javascript,ecmascript-6,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

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

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

我只能假设您试图做的是从每个值中提取第一个数字并进行比较,但是如果是这样,那么您做得不正确<如果存在匹配项,则code>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];
});
var temp=[];
temp[1]="Apple";
temp[2]="Orange";
temp[3]="Banana";

temp.sort(function(a, b) {
  return return (a < b) ? 1 : -1;  
});
仅供参考(旁注)-使用返回条件-1 : -1;几乎总是错误的。如果两个值按顺序相等,则函数需要返回
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];
});
var temp=[];
temp[1]="Apple";
temp[2]="Orange";
temp[3]="Banana";

temp.sort(function(a, b) {
  return return (a < b) ? 1 : -1;  
});

如果存在匹配项,则
.exec()
方法将返回一个数组。(也不清楚您希望这些东西是如何排序的;只是按数值排序吗?)对,我一直在做return(一[0]>二[0]如果我们不知道
temp
中有什么,我们应该回答这个问题吗?请给我们一个重复的例子:@JLRishe是的,我没有完全理解那部分…@atlMapper,我们可以假设
字段的值是
“name”吗
?您完全正确,我正在尝试比较数字,直到每个值的破折号。字符串中的破折号导致比较失败。@atlMapper实际上是字符串中的
m
导致比较失败。啊……我明白您的说法以及解决方案的工作原理(我想)。贪婪的正则表达式寻找这两个数字,要么生成一个结果数组,要么给出一个空数组进行比较。谢谢。我的旁注是错误的:请阅读以下内容:@Skywalker,这些行如何与我所说的相矛盾?它们是否使用
返回条件?-1:1;
?它们看起来不像。不,这些行基本上证实了这一点正是我所说的。与您从MDN中引用的代码片段相反,如果
a
b
相等,则函数返回
1
。我也不知道这个答案与上面所问的特定问题有什么关系。这不会改变您的答案中有错误陈述的事实。我的ans的后半部分我们解释了可能的返回值。正如你可能同意的那样,返回值是问题的本质。你没有回答正确。你仍然需要解释我的答案有哪些地方不正确。这不是不正确,原因与你的答案不正确完全相同。我想你需要提高阅读技能,因为你有两人都误解了我的观点,也误解了OP的问题。提问者不需要向他/她解释排序的基本原理。他/她已经很好地理解了这一点。