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

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"


..为什么?我用sort应该对我的数组排序吗?

最佳答案

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

09-25 16:13