我有对象数组。我想如果我在数组中添加对象,它应该以排序的方式添加。我使用数组进行排序。但它不对我的数组进行排序。这是我的代码
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());
});