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;排序比较函数中的code>几乎总是错误的。如果两个值按顺序相等,则函数需要返回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的问题。提问者不需要向他/她解释排序的基本原理。他/她已经很好地理解了这一点。