JavaScript数组排序后去除零元素的技术实现问题咨询
数组排序并过滤零的实现
修正排序逻辑+过滤零
你的原代码里a.num、b.num是多余的(数组元素为直接数字,并非带num属性的对象),这里给出两种可行方案:
方案一:先排序再过滤
先将数组按「非零元素升序、零置于末尾」排序,再过滤掉所有零:
var data = [1,6,5,0,9,8,0]; // 正确排序逻辑:零放末尾,其余升序 data.sort((a, b) => { if (a === 0) return 1; if (b === 0) return -1; return a - b; }); // 过滤零元素 const result = data.filter(item => item !== 0); console.log(result); // 输出:[1,5,6,8,9]
方案二:先过滤再排序
如果不需要保留含零的原排序数组,可直接先过滤零,再对剩余元素排序,逻辑更简洁高效:
var data = [1,6,5,0,9,8,0]; const result = data.filter(item => item !== 0).sort((a, b) => a - b); console.log(result); // 输出:[1,5,6,8,9]
场景说明
- 方案一适合需要同时保留「含零的完整排序数组」和「过滤后的无零数组」的场景;
- 方案二更高效,因为过滤后数组元素更少,排序计算量更低。
内容的提问来源于stack exchange,提问作者n0bi
相关产品推荐
相关产品推荐

