源码阅读系列一、is-sorted
1、概述
is-sorted
是一个精美小巧的npm库,核心代码仅有11行,其功能是检查数组是否已排序,在npm
上周下载量为855,很火爆。npm仓库:https://www.npmjs.com/package/is-sorted
2、源码解析
阅读源码之前养成一个习惯,先从package.json
文件读起。通过阅读可知,is-sorted
库没有引入其他库。
以下为核心代码:
// 默认为正序排序,从小到大
function defaultComparator (a, b) {
return a - b
}
// 两个参数, array必须为数组;
// comparator为函数,可不传,若为function (a, b) { return b - a }),功能为检测反序
// module.exports导出函数
module.exports = function checksort (array, comparator) {
// Array.isArray检测是否为数组,如果不是数组,抛出错误
if (!Array.isArray(array)) throw new TypeError('Expected Array, got ' + (typeof array))
// 如果comparator不为空,则为传入的函数。否则为defaultComparator正序检测函数
comparator = comparator || defaultComparator
for (var i = 1, length = array.length; i < length; ++i) {
// 正序检测函数为a-b,array[i-1]必定小于array[i];
// 反序函数为b-a,array[i]必定小于array[i-1]
if (comparator(array[i - 1], array[i]) > 0) return false
}
return true
}
node
中使用is-sorted
库:
// 1、如果为空白文件夹:npm init -y,创建package.js文件;
// 2、安装该库:npm i is-sorted
// 3、代码中使用
// 4、运行改程序:node index.js
var isSorted = require('is-sorted')
console.log(isSorted([1, 2, 3, 4, 5])); // true
console.log(isSorted([1, 2, 3, 9, 4])); // false
console.log(isSorted([5, 4, 3, 2, 1])); // false
console.log(isSorted('aaaa')); // Expected Array, got string
console.log(isSorted([4,3,2,1], function (a, b) { return b - a })); // true
3、总结
is-sorted
库,可谓是短小精悍,其实在开发中,验证数组是否排序,我们都可以写出来,搞个函数。但是该库作者把这个功能封装了一下放到npm,意外火爆,这值得我们学习。代码层次我的理解是,既然判断是否排序,应不管是正序还是反序,都应返回true
,如果是我来做的话,会在defaultComparator
函数中判断两种情况,分别为正序和反序。当然这只是我一隅之见,若是有不对之处,希望大家多多指出。
![]() |
![]() |
内容持续更新中…
但行好事,莫问前程。
lvan学习笔记-文章内容仅个人观点
2021.10.26