如何对含true、false、null布尔值的JavaScript对象数组排序?
解决方案:含null的布尔属性对象数组排序
要实现按boolean属性排序,且让true、false、null按指定顺序排列,核心思路是给三种值分配明确的权重,通过权重差值控制排序逻辑。
问题分析
你之前尝试的b.boolean - a.boolean方式无效,原因是JavaScript类型转换特性:
true转数字为1,false和null转数字均为0- 当比较
false和null时,差值为0,sort会保留它们的原顺序,导致排列混乱
而你第二个尝试的错误在于,sort的比较函数仅接收两个参数(a和b),不存在第三个参数c,因此逻辑完全不生效。
可行实现
通过给三种值分配不同权重,实现稳定排序:
const arrayOfObjects = [ { id: 69, boolean: true, name: 'foo' }, { id: 42, boolean: false, name: 'bar' }, { id: 666, boolean: null, name: 'foo' }, { id: 420, boolean: false, name: 'bar' }, { id: 2, boolean: null, name: 'foo' }, { id: 123, boolean: true, name: 'foo' }, ]; arrayOfObjects.sort((a, b) => { // 定义权重规则:true > false > null const getPriority = (val) => { if (val === true) return 3; if (val === false) return 2; if (val === null) return 1; return 0; // 处理意外值 }; // 降序排列,权重高的元素在前 return getPriority(b.boolean) - getPriority(a.boolean); }); console.log(arrayOfObjects);
排序结果
执行后数组会按true → false → null的顺序稳定排列:
[ { id: 69, boolean: true, name: 'foo' }, { id: 123, boolean: true, name: 'foo' }, { id: 42, boolean: false, name: 'bar' }, { id: 420, boolean: false, name: 'bar' }, { id: 666, boolean: null, name: 'foo' }, { id: 2, boolean: null, name: 'foo' } ]
自定义顺序
若需要调整排列顺序(比如把null放在false前面),只需修改getPriority的返回值即可:
const getPriority = (val) => { if (val === true) return 3; if (val === null) return 2; if (val === false) return 1; return 0; };
内容的提问来源于stack exchange,提问作者Marnix Elling
相关产品推荐
相关产品推荐

