为什么array.sort无法在javascript中运行?

时间:2016-04-29 23:52:48

标签: javascript jquery arrays sorting

我有一个对象数组。我想如果我在数组中添加对象,它应该以排序的方式添加。我使用数组进行排序。但它不对我的数组进行排序。这是我的代码

https://jsfiddle.net/8oczc5x5/

var arr = [{
  elem: {
    text: function() {
      return "aa";
    }
  }
}, {
  elem: {
    text: function() {
      return "yy";
    }
  }
}];
var obj = {
  elem: {
    text: function() {
      return "bb";
    }
  }
}
arr.push(obj);
arr.sort()
console.log(arr[1].elem.text())

预期输出

"bb"

实际输出

"yy" 

..为什么?我使用排序它应该排序我的数组?

3 个答案:

答案 0 :(得分:3)

sort只有真正有效并且开箱即用"按字母顺序排序字符数据时为什么你会期望它调用你的函数并进行比较?这非常危险和复杂。但是,您可以通过传递函数来执行自己的特殊排序。

取自文档(compareFunction是您传入的功能):

  

如果提供compareFunction,则根据比较函数的返回值对数组元素进行排序。如果a和b是要比较的两个元素,那么:

     

如果compareFunction(a, b)小于0,则将a排序为低于b的索引,即a先来。

     

如果compareFunction(a, b)返回0,则保持a和b相对于彼此保持不变,但是对所有不同的元素进行排序。注意:ECMAscript标准不保证这种行为,因此并非所有浏览器(例如可追溯到至少2003年的Mozilla版本)都尊重这一点。

     

如果compareFunction(a, b)大于0,则将b排序为低于a的索引。   当给定一对特定元素a和b作为其两个参数时,compareFunction(a, b)必须始终返回相同的值。如果返回不一致的结果,则排序顺序未定义。

arr.sort(function(a, b) {
  // localeCompare does a string comparison that returns -1, 0, or 1
  return a.elem.text().localeCompare(b.elem.text());
});

答案 1 :(得分:1)

function sortNumber(num1,num2) {return num1 - num2;} var numbs = [5, 17, 29, 48, 4, 21]; 
var sortnumb = numbs.sort(sortNumber);
alert(sortnumb)

答案 2 :(得分:0)

您必须指定如何排序

arr.sort(function(a,b){
   a=a.elem.text();
   b=b.elem.text();
   return a > b ? 1 : (a < b ? -1 : 0);
})