js中对元素数组排序比较上下限值
在工作过程中遇到了多条记录比较分值上下限的问题,首先是用java写的比较程序如下:
if(PartnerConstants.CODE_INFO_SUP_EVA_RESULT_TYPE_SCORE.equals(supEvaResultTypeCode)
||PartnerConstants.CODE_INFO_SUP_EVA_RESULT_TYPE_LEVEL.equals(supEvaResultTypeCode)){
//按分值下线排序
sortResults(supEvaSystemResults);
boolean flag=false;
for(int i = 0;i<supEvaSystemResults.size();i++){
//分值下线
BigDecimal scoreLowerBefore = supEvaSystemResults.get(i).getScoreLower();
//分值上线
BigDecimal scoreLimitBefore = supEvaSystemResults.get(i).getScoreLimit();
for(int j=i+1;j<supEvaSystemResults.size();j++){
BigDecimal scoreLowerAfter = supEvaSystemResults.get(j).getScoreLower();
if(scoreLowerBefore.compareTo(scoreLowerAfter)==0){// 1)如果前、后两条数据 分值下线相等 则不满足条件
flag=true;
}else if(scoreLimitBefore.compareTo(scoreLowerAfter)>=0){//2)如果前一条的分值上线大于等于后一条的分值下线则不满足条件
flag=true;
}
}
}
//评分或者评级的分值范围不能交叉
if(flag)
/**
* 按分值下线从小到大排序
* @param supEvaSystemResults
*/
private void sortResults(List<SupplierEvaluationSystemResultEntity> supEvaSystemResults){
Collections.sort(supEvaSystemResults, new Comparator<SupplierEvaluationSystemResultEntity>(){
public int compare(SupplierEvaluationSystemResultEntity r1, SupplierEvaluationSystemResultEntity r2)
看了这个思路:总结出大致思路就是先对得到的对象数据拍照上限或者下限的字段进行排序,然后for循环进行比较如果前后两条数据的分值下限相等则不满足条件;前一条分值上限大于等于后一条分值下限则不满足条件;
于是我就上网找了个方法是按照某个字段对数组元素进行排序,方法如下:
//by函数接受一个成员名字符串做为参数 //并返回一个可以用来对包含该成员的对象数组进行排序的比较函数 var by = function(name){ return function(o, p){ var a, b; if (typeof o ===
"object" && typeof p === "object" && o && p) { a = o[name]; b = p[name]; if (a === b) { return 0; } if (typeof a ===
typeof b) { return a < b ? -1 : 1; } return typeof a < typeof b ? -1 : 1; } else { throw ("error"); } } }
然后用.net方法写了上限值交叉的方法如下:
//判断分值上下限是否交叉
&nb
相关新闻>>
- 发表评论
-
- 最新评论 更多>>