PCo*_*lho 56 javascript sorting
请参阅最后的编辑以了解实际问题.
好的,我有这个场景:
a = [false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]
Run Code Online (Sandbox Code Playgroud)
如果我这样做:
a.sort(function(a,b){return !a && b});
Run Code Online (Sandbox Code Playgroud)
它给了我这个:
[false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, true, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]
Run Code Online (Sandbox Code Playgroud)
这有点......但不完全...... :(
我该如何排序这个数组?
编辑:
如果你想知道我为什么不使用a.sort()是因为我的实际数组是对象,而不是像我发布的那样的普通数组.真实的元素看起来像[{xx:true},{xx:false},...]
c.P*_*.u1 144
a = [false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false];
a.sort(function(x, y) {
// true values first
return (x === y)? 0 : x? -1 : 1;
// false values first
// return (x === y)? 0 : x? 1 : -1;
});
console.log(a);Run Code Online (Sandbox Code Playgroud)
当a和b都具有相同的值时,必须返回0,如果a为真,则返回-1,否则返回1.
dan*_*vis 28
一种更简单的方法:
a = [{xx:true},{xx:false},{xx:true},{xx:false},{xx:true},{xx:false},{xx:true},{xx:false},{xx:true},{xx:false},{xx:true},{xx:false},{xx:true},{xx:false},{xx:true},{xx:false},{xx:true},{xx:false}];
a.sort(function(a,b){return a.xx-b.xx});
console.log(a);
Run Code Online (Sandbox Code Playgroud)
如果你想让它以另一种方式排序,你可以在sort()之后调用a.reverse().
编辑:编辑以反映排序对象数组而不是布尔数组的更新问题.
Cap*_*apK 15
数组没有任何相等的位置,所以为什么不放弃相等检查,并始终返回 -1 或 1。这种方法适用于 TS。
a.sort(x => x ? -1 : 1)
Run Code Online (Sandbox Code Playgroud)
注意:我有点担心这会如何影响 sort 函数的内部结构,但它似乎可以解决问题。
如果你想反向排序
a.sort(x => !x ? -1 : 1)
Run Code Online (Sandbox Code Playgroud)
为了防止隐式类型转换(像TypeScript这样的语言不喜欢),可以使用Number()将布尔值显式转换为数字:
a = [false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false];
a.sort(function(x, y) {
return Number(x) - Number(y);
});
console.log(a);Run Code Online (Sandbox Code Playgroud)
或使用箭头功能:
a = [false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false];
a.sort((x, y) => Number(x) - Number(y));
console.log(a);Run Code Online (Sandbox Code Playgroud)