Javascript 计算对象属性,给出与点表示法不同的结果

Javascript 计算对象属性,给出与点表示法不同的结果,javascript,arrays,sorting,object,properties,Javascript,Arrays,Sorting,Object,Properties,我正在使用一个合并排序函数。当我对我试图使用的属性使用点符号时,它会对它们进行正确排序。我决定能够在其他属性上重用排序功能,因此我决定将该属性作为函数中的参数,而不是硬编码。问题是,当我将相同的属性传递给它时,项目排序不同。不知道为什么会这样 这是我根据points属性排序的对象数组 [ { teamNum: 0, points: 2, GD: -2, goals: 3, rank: 0 }, { teamNum: 1, points: 2, GD: -2, goals: 3, rank:

我正在使用一个合并排序函数。当我对我试图使用的属性使用点符号时,它会对它们进行正确排序。我决定能够在其他属性上重用排序功能,因此我决定将该属性作为函数中的参数,而不是硬编码。问题是,当我将相同的属性传递给它时,项目排序不同。不知道为什么会这样

这是我根据points属性排序的对象数组

[ { teamNum: 0, points: 2, GD: -2, goals: 3, rank: 0 },
  { teamNum: 1, points: 2, GD: -2, goals: 3, rank: 0 },
  { teamNum: 2, points: 1, GD: -3, goals: 2, rank: 0 },
  { teamNum: 3, points: 4, GD: 1, goals: 4, rank: 0 },
  { teamNum: 4, points: 5, GD: 4, goals: 5, rank: 0 },
  { teamNum: 5, points: 4, GD: 2, goals: 6, rank: 0 } ]
工作合并排序功能:

*注意merge的if语句中的.points

  function mergeSort(arr){
   var len = arr.length;
   if(len <2)
      return arr;
   var mid = Math.floor(len/2),
       left = arr.slice(0,mid),
       right =arr.slice(mid);
   //send left and right to the mergeSort to break it down into pieces
   //then merge those
   return merge(mergeSort(left),mergeSort(right));
}


function merge(left, right){
  var result = [],
      lLen = left.length,
      rLen = right.length,
      l = 0,
      r = 0;
  while(l < lLen && r < rLen){
     if(left[l].points < right[r].points){
       result.push(left[l++]);
     }
     else{
       result.push(right[r++]);
    }
  }  
  //remaining part needs to be addred to the result
  return result.concat(left.slice(l)).concat(right.slice(r));
}
const Teams=[{teamNum:0,积分:2,GD:-2,目标:3,排名:0}, {teamNum:1,积分:2,GD:-2,目标:3,排名:0}, {teamNum:2,积分:1,GD:-3,目标:2,排名:0}, {teamNum:3,积分:4,GD:1,目标:4,排名:0}, {teamNum:4,积分:5,GD:4,目标:5,排名:0}, {teamNum:5,积分:4,GD:2,目标:6,排名:0}] 函数合并器{ var len=阵列长度; 如果len<2 返回arr; var mid=数学。floorlen/2, 左=arr.0,中间, 右=arr.mid; //将左侧和右侧发送到合并排序,将其分解为多个部分 //然后合并这些 返回mergesortleft、mergeSortright; } 函数左,右{ var结果=[], lLen=left.length, rLen=右。长度, l=0, r=0; 而l
let rankArr = mergeSort(Teams,"points").reverse();
但是您还需要将其传递给递归调用。改变

return merge(mergeSort(left),mergeSort(right), prop);

否则,在递归过程中,它将是未定义的,并且不会发生合理的排序

const Teams=[{teamNum:0,积分:2,GD:-2,目标:3,排名:0}, {teamNum:1,积分:2,GD:-2,目标:3,排名:0}, {teamNum:2,积分:1,GD:-3,目标:2,排名:0}, {teamNum:3,积分:4,GD:1,目标:4,排名:0}, {teamNum:4,积分:5,GD:4,目标:5,排名:0}, {teamNum:5,积分:4,GD:2,目标:6,排名:0}]; 功能合并器,道具{ var len=阵列长度; 如果你能做到:

var arrayOfObjs=[{teamNum:0,积分:2,GD:-2,目标:3,排名:0}, {teamNum:1,积分:2,GD:-2,目标:3,排名:0}, {teamNum:2,积分:1,GD:-3,目标:2,排名:0}, {teamNum:3,积分:4,GD:1,目标:4,排名:0}, {teamNum:4,积分:5,GD:4,目标:5,排名:0}, {teamNum:5,积分:4,GD:2,目标:6,排名:0}]; var sorted=arrayOfObjs.slice; 排序。排序函数a,b{ 返回b点-a点; };
logsorted;谢谢!我记得使用动态版本底部的属性进行调用,但是我没有将它传递给函数中的递归调用left和right。
return merge(mergeSort(left),mergeSort(right), prop);
return merge(mergeSort(left, prop),mergeSort(right, prop), prop);