我正在尝试根据数组对象的一个属性start
对数组进行排序。
events = _.sortBy(events, function(a) {
return moment(new Date(a.start)).format();
});
这给了我正确的结果。但是,以下情况并非如此。
events = events.sort(function(a, b) {
return moment(new Date(a.start)).format() > moment(new Date(b.start)).format();
});
有谁知道发生了什么?
答案 0 :(得分:2)
比较函数必须返回-1,0或1:
function compare(a, b) {
if (a is less than b by some ordering criterion) {
return -1;
}
if (a is greater than b by the ordering criterion) {
return 1;
}
// a must be equal to b
return 0;
}
目前你的代码返回布尔值,我认为它被解析为0或1,所以你的代码运行但不正确。
答案 1 :(得分:1)
这是the docs of Array.sort
所说的:
arr.sort([compareFunction])
如果提供compareFunction,则对数组元素进行排序 根据比较函数的返回值。如果a和b是 比较两个要素,然后:
- 如果compareFunction(a,b)小于0,则将a排序为低于b的索引,即a先出现。
- 如果compareFunction(a,b)返回0,则保持a和b相对于彼此保持不变,但是对于所有不同的 元素。注意:ECMAscript标准不保证这一点 行为,因而并非所有浏览器(例如Mozilla版本约会 回到至少2003年)尊重这一点。
- 如果compareFunction(a,b)大于0,则将b排序为低于a的索引。
- compareFunction(a,b)在给定一对特定元素a和b作为其两个参数时必须始终返回相同的值。如果 返回不一致的结果,然后排序顺序未定义
你的函数返回一个布尔值,然后转换为Number
,0
或1
,在这种情况下0
表示相等(作为&# 34;这些元素是相同的,按任何顺序排列")。
答案 2 :(得分:1)
比较器函数通常返回一个整数参数,表示以下值:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
一个方便的技巧是从a
的离散值中减去b
的离散值,在您的情况下,例如通过使用时间戳:
function (a, b) { return (new Date(b)).getTime() - (new Date(a)).getTime(); }
如果b现在大于a,它将返回正值,依此类推。
答案 3 :(得分:0)
我发现你的代码都有相同的结果
<md-button ui-sref="menu1" >Menu1</md-button>
<md-button>Menu2</md-button>
两个数组都返回了相同的结果。