JS中如何检查数字数组是否按从高到低降序排序?
JS检查数组是否降序排列的实现方案
核心逻辑为遍历数组比对相邻元素大小,只要存在后一项大于前一项的情况,即可判定不符合降序规则。由于你给出的示例数组为字符串类型的数字,实现时需要先做数值转换,避免出现字符串按字典序比对的错误(比如'11' > '5'按字符串比对会返回false)。
方法1:基础for循环实现(兼容性最优)
该方案兼容所有JS运行环境,且遍历到不符合规则的元素时会直接终止执行,性能损耗最低。
function isDescending(arr) { // 空数组、仅含1个元素的数组默认符合降序要求 if (arr.length <= 1) return true for (let i = 0; i < arr.length - 1; i++) { const current = Number(arr[i]) const next = Number(arr[i + 1]) // 后一项大于前一项,不符合降序 if (next > current) { return false } } return true } // 测试用例 const validArr = ['15','14','11','5'] console.log(isDescending(validArr)) // 输出:true const invalidArr = ['15','17','11','5'] console.log(isDescending(invalidArr)) // 输出:false
方法2:Array.every 简洁写法
ES5及以上环境可以用every方法简化代码,逻辑和for循环完全一致:
function isDescending(arr) { return arr.length <= 1 || arr.every((item, index) => { // 第一个元素无需比对 if (index === 0) return true return Number(item) <= Number(arr[index - 1]) }) }
注意事项
- 如果你的数组元素确定为纯Number类型,可以去掉
Number()转换逻辑,减少冗余操作 - 若数组可能包含非数字内容,
Number()转换后会得到NaN,比对结果永远为false,需要额外添加NaN判断逻辑适配这类场景
内容的提问来源于stack exchange,提问作者devnewbie
相关产品推荐
相关产品推荐

