rabbit-toolkit
安装
bash
$ npm i rabbit-toolkit
快速上手
ts
import * as rabbit from 'rabbit-toolkit'
const result = rabbit.fibonacci(10)
console.log(result) //
API
判断一个数是否为奇数
ts
/**
* 判断一个数是否为奇数
* @param num 要判断的数字
* @return {Boolean} 奇数返回true,偶数返回false
*/
export function isPrime(num: number): boolean {
return num % 2 === 1;
}
计算斐波那契数列指定位置的数值
ts
/**
* 计算斐波那契数列指定位置的数值
* @param position 斐波那契数列的位置
* @returns {Number} 该位置的斐波那契数值
*/
export function fibonacci(position: number): number {
let index = 2,
start = 1,
end = 1;
while (index < position) {
(end = start + (start = end));
++index;
}
return end;
}
计算一个数的阶乘
ts
/**
* 计算一个数的阶乘
* @param {Number} n 要计算阶乘的数
* @return {Number} 阶乘结果
*/
export function factorial(n: number): number {
return (n === 0 || n === 1) ? 1 : n * factorial(n - 1);
}
判断年份是否是闰年
ts
/**
* 判断年份是否是闰年
* @param {Number} year 要判断的年份
* @return {Boolean} 闰年返回true,平年返回false
*/
export function isLoopYear(year: number): boolean {
return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;
}
获取一个数的指定二进制位的值
ts
/**
* 获取一个数的指定二进制位的值
* @param {Number} num 求二进制的数
* @param {Number} index 需要二进制位的索引位置
* @return {Number} 该二进制位上的bit值,1或0
*/
export function bit(num: number, index: number): number {
return num & 1 << index ? 1 : 0;
}
获取一个数的指定二进制位的值
ts
/**
* 获取一个数的指定二进制位的值
* @param {Number} num 求二进制的数
* @param {Number} index 需要二进制位的索引位置
* @return {Number} 该二进制位上的bit值,1或0
*/
export function bit(num: number, index: number): number {
return num & 1 << index ? 1 : 0;
}
将一个数转换成指定位数的二进制
ts
/**
* 将一个数转换成指定位数的二进制,同时返回字符串形式和数组形式的二进制结果
* @param {Number} num 需要求二进制的目标值
* @param {Number} bits 需要展示多少位的二进制
* @return {Array} 返回字符串形式和数组形式的二进制结果
*/
export function bin(num: number, bits: number): (string | number[])[] {
let tmp = 0, r1 = '', r2 = [];
for (let i = bits - 1; i >= 0; i--) {
tmp = bit(num, i);
r1 += tmp;
r2.push(tmp);
}
return [r1, r2]
}
生成杨辉三角形的字符串展示
ts
/**
* 生成杨辉三角形的字符串展示
* @param {Number} ROW 杨辉三角的行数
* @param {Number} len 每个数字占的宽度,默认为4
* @param regular 正三角形:true(默认),直角三角形:false
* @param {String} align 对齐方式:left、center(默认方式)、right
* @return {String} 返回杨辉三角的字符串展示
*/
export function YanhuiTriangle(ROW: number, len: number = 4, regular: boolean = true, align: string = 'center') {
let rows = ROW;
let cols = 2 * ROW - 1;
let center = Math.floor((2 * ROW - 1) / 2);
// 初始化数组,填充初始值0
let arr = Array.from({length: ROW}, () => Array(cols).fill(0));
// 1、从中心位置向两边边缘位置填充1
for (let i = 0; i < rows; i++) {
for (let j = 0; j < 1; j++) {
arr[i][center - i] = 1;
arr[i][center + i] = 1;
}
}
// 2、从中间位置开始对两边的数进行求和操作,该行该列的数 = 前一行该列的前一行 + 前一行该列的后一行
for (let i = 0; i < rows; i++) {
for (let j = 0; j < i; j++) {
arr[i][center - j] = arr[i - 1][center - j - 1] + arr[i - 1][center - j + 1];
arr[i][center + j] = arr[i - 1][center + j - 1] + arr[i - 1][center + j + 1];
}
}
// 3、根据参数格式化并打印结果
let stringTemplate = "";
for (let i = 0; i < rows; i++) {
for (let j = 0; j < 2 * rows - 1; j++) {
stringTemplate +=
arr[i][j] === 0 ? (regular ? convertFixedLength("", len, align) : '') :
convertFixedLength(arr[i][j].toString(), len, align);
}
stringTemplate += "\n";
}
return stringTemplate;
}
将字符串转换为固定长度的格式
ts
/**
* 根据指定长度和对齐方式,将字符串转换为固定长度的格式
* @param {String} str 源字符串
* @param {Number} len 字符串固定长度
* @param {String} align 对齐方式:left、center、right
* @return {String} 加工后的字符串
*/
export function convertFixedLength(str: string, len: number, align: string = 'left'): string {
let remain = len - str.length;
switch (align) {
case 'left':
return (str + fillSpace(remain));
case 'right':
return (fillSpace(remain) + str);
case 'center':
return (fillSpace(Math.floor(remain / 2)) + str + fillSpace(Math.ceil(remain / 2)));
default:
return (str + fillSpace(remain));
}
}
生成指定长度的空格字符串
ts
/**
* 生成指定长度的空格字符串
* @param {Number} len 需要的空格长度
* @return {String} 生成的空格字符串
*/
export function fillSpace(len: number): string {
if (len < 0) return "";
let space = '';
for (let i = 0; i < len; i++) space += " ";
return space;
}