Skip to content

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;
}