npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

dh-yf-utils

v1.0.5

Published

常用工具类

Downloads

313

Readme

工具类函数

roundNumber

/**
 * 对给定的数值进行四舍五入,并根据需要格式化为千分位字符串。
 *
 * @param value - 需要处理的数值,可以是数字或字符串形式。
 * @param decimalPlaces - 保留的小数位数。
 * @param formatThousands - 是否格式化为千分位,默认为 false。
 * @returns 处理后的字符串形式的数值。
 */
roundNumber(1234.5678); // "1234.57"
roundNumber(1234.5678, 1); // "1234.6"
roundNumber(1234.5678, 3); // "1234.568"
roundNumber('1234.5678', 2, true); // "1,234.57"
roundNumber('1000', 2, true); // "1,000"
roundNumber('abc'); // ""
roundNumber(1000, 0, true); // "1,000"

onInputFixedN

/**
 * 格式化给定的数字输入字符串,通过移除无效字符、处理负号、
 * 并限制小数位数来确保输入的正确性。
 *
 * @param value - 要格式化的输入字符串。它应该表示一个数字值。
 * @param decimalPlaces - 允许的小数位数,默认为 2。
 * @param allowNegative - 一个布尔值,指示是否允许负数。默认为 false。
 * @returns 一个格式化的字符串,表示具有指定限制的数字值。
 */
<el-input v-model="value" @keyup.native="value=onInputFixedN(value)"/>

onInputInt

/**
 * 处理输入字符串,移除无效字符并格式化为整数形式。
 * @param value - 输入的字符串,可能包含数字和其他字符。
 * @param allowNegative - 是否允许负数,默认为 false。
 * @returns 处理后的字符串,仅包含有效的整数表示。
 */
<el-input v-model="value" @keyup.native="value=onInputInt(value)"/>

parseTime

/**
 * 将给定的时间输入解析为基于指定格式的日期字符串。
 *
 * @param time - 要解析的时间输入。可以是字符串、数字或 Date 对象。
 *               - 如果是表示时间戳或日期的字符串,将进行相应转换。
 *               - 如果是数字,将被视为时间戳(秒或毫秒)。
 * @param pattern - 可选的格式模式,用于定义输出格式。
 *                  - 默认格式为 '{y}-{m}-{d} {h}:{i}:{s}',表示 '年-月-日 时:分:秒'。
 * @returns 返回基于提供的格式的格式化日期字符串,如果时间无效则返回 null。
 *
 */
console.log(parseTime(new Date())); 
// 输出: 当前日期和时间,例如 "2024-12-12 14:30:45"

console.log(parseTime(1609459200, '{y}/{m}/{d} 星期{a}')); 
// 输出: "2021/01/01 星期五" (假设输入为秒数)

console.log(parseTime('2024-12-12', '{y}年{m}月{d}日')); 
// 输出: "2024年12月12日"

console.log(parseTime('2024-12-12T14:30:45.123Z', '{h}:{i}:{s}')); 
// 输出: "14:30:45" (根据时区可能会有所不同)

sprintf

/**
* 格式化字符串,通过替换 `%s` 占位符实现动态插入参数值。
*
* @param str - 包含 `%s` 占位符的字符串。
* @param args - 用于替换占位符的参数列表。
* @returns 返回格式化后的字符串,如果参数不足以替换所有 `%s`,则返回空字符串。
*/
sprintf("Hello, %s!", "world"); // "Hello, world!"
sprintf("%s is %s years old.", "Alice", 30); // "Alice is 30 years old."
sprintf("This is a %s test", "simple"); // "This is a simple test"
sprintf("Missing %s and %s", "one"); // ""

parseStrEmpty

/**
 * 解析字符串,将 `undefined`、`null` 或空值转换为空字符串。
 *
 * @param str - 要解析的字符串,可以是 `string` 或 `undefined`。
 * @returns 如果输入为 `undefined`、`"undefined"`、`"null"` 或空字符串,则返回空字符串 `""`;否则返回原字符串。
 */
parseStrEmpty(undefined); // ""
parseStrEmpty("undefined"); // ""
parseStrEmpty("null"); // ""
parseStrEmpty(""); // ""
parseStrEmpty("hello"); // "hello"
parseStrEmpty("nullish"); // "nullish"

mergeRecursive

/**
 * 递归合并两个对象,将目标对象的属性合并到源对象中。
 *
 * @param source - 源对象,将被修改以包含目标对象的属性。
 * @param target - 目标对象,其属性将合并到源对象中。
 * @returns 返回合并后的源对象。
 */
const source = {
        a: 1,
        b: { c: 3, d: 4 }
    };

const target = {
    b: { c: 30, e: 5 },
    f: 6
};

const result = mergeRecursive(source, target);
console.log(result);
// 输出: { a: 1, b: { c: 30, d: 4, e: 5 }, f: 6 }

handleTree

/**
 * 将扁平结构的数据转换为树形结构。
 *
 * @param params - 包含数据和配置的对象。
 *   - `data` 是一个数组,包含需要转换为树形结构的节点。
 *   - `id` 是节点的唯一标识符的属性名,默认为 `'id'`。
 *   - `parentId` 是父节点标识符的属性名,默认为 `'parentId'`。
 *   - `children` 是子节点列表的属性名,默认为 `'children'`。
 * @returns 返回树形结构的节点数组。
 */
const data = [
    { id: 1, parentId: null, name: 'Root 1' },
    { id: 2, parentId: 1, name: 'Child 1.1' },
    { id: 3, parentId: 1, name: 'Child 1.2' },
    { id: 4, parentId: 2, name: 'Child 1.1.1' },
    { id: 5, parentId: null, name: 'Root 2' },
    { id: 6, parentId: 5, name: 'Child 2.1' }
];

const tree = handleTree({ data });
[
  {
    "id": 1,
    "parentId": null,
    "name": "Root 1",
    "children": [
      {
        "id": 2,
        "parentId": 1,
        "name": "Child 1.1",
        "children": [
          {
            "id": 4,
            "parentId": 2,
            "name": "Child 1.1.1"
          }
        ]
      },
      {
        "id": 3,
        "parentId": 1,
        "name": "Child 1.2"
      }
    ]
  },
  {
    "id": 5,
    "parentId": null,
    "name": "Root 2",
    "children": [
      {
        "id": 6,
        "parentId": 5,
        "name": "Child 2.1"
      }
    ]
  }
]

convertArrayToObject

/**
 * 将对象数组转换为键值对对象,其中键和值字段可以指定。
 *
 * @param data - 要转换的对象数组。
 * @param key - 用作结果对象键的字段名称。
 * @param value - 用作结果对象值的字段名称。
 * @returns 返回一个对象,其中键和值来自指定字段。
 */
const data = [
    { label: 'First', value: '1'},
    { label: 'Second', value: '2' },
    { label: 'Third', value: '3'}
];

const result = convertArrayToObject(data)
/*
{
    "1": "First",
    "2": "Second",
    "3": "Third"
}
*/

tansParams

/**
 * 将对象转换为 URL 查询参数字符串。
 *
 * @param params - 要转换的对象,其中的键值对将被编码为 URL 查询参数。
 * @returns 返回一个字符串,表示对象转换后的查询参数。
 */
const params = {
    name: "John Doe",
    age: 30,
    preferences: {
        color: "blue",
        food: "pizza"
    },
    emptyValue: "",
    nullValue: null
};

const queryString = tansParams(params);
// name=John%20Doe&age=30&preferences%5Bcolor%5D=blue&preferences%5Bfood%5D=pizza

randomString

/**
 * 生成指定长度的随机字符串。
 *
 * @param {number} [string_length=20] - 要生成的随机字符串的长度。默认为 20。
 * @returns {string} 返回生成的随机字符串。
 */
const randomStr1 = randomString();
console.log(randomStr1); // 可能输出: 'a8BcD9EfGhIjKlMnOpQr'

const randomStr2 = randomString(10);
console.log(randomStr2); // 可能输出: 'ZxYwVuTsRq'

generateUUID

/**
 * 生成一个 UUID(通用唯一标识符)。
 * UUID 格式为 8-4-4-4-12,共 32 个字符的字符串。
 *
 * @returns 返回生成的 UUID 字符串。
 */
const uuid1 = generateUUID();
console.log(uuid1); // 可能输出: 'e7b1c9a1-7d5b-4c3d-9f1e-2f3a8c5d6e7f'

download

/**
 * 通过创建一个临时链接来下载给定的数据。
 *
 * @param data - 要下载的数据,可以是任何类型。
 * @param name - 下载文件的名称。
 */
download(data,'aaa.xlsx')

getParameter

/**
 * 从 URL 或字符串中获取指定键的参数值。
 *
 * @param {string} key - 要获取的参数键。
 * @param {string} [urlOrString=window.location.href] - 包含参数的 URL 或字符串。
 * @returns {string | null} 返回与指定键对应的参数值,如果未找到则返回 null。
 */

// 假设当前 URL 是 'http://example.com/page?foo=bar#section?baz=qux'
const fooValue = getParameter('foo'); // 返回 'bar'
const bazValue = getParameter('baz'); // 返回 'qux'
const missingValue = getParameter('missing'); // 返回 null

// 提供一个特定的 URL
const paramValue = getParameter('key', '/test?key=value#hash?key2=value2');
// 返回 'value'

exportExcel

/**
 * 导出数据为 Excel 文件。
 *
 * @param {Array<Object>} data - 要导出的数据数组,每个对象代表一行数据。
 * @param {Array<string>} filterVal - 数据对象中需要导出的属性名数组。
 * @param {Array<string>} header - Excel 表格的表头数组,与 `filterVal` 对应。
 * @param {string} [filename='new-excel.xlsx'] - 导出的 Excel 文件名,默认为 'new-excel.xlsx'。
 *
 * @returns {void} 不返回任何值。
 *
 * @throws {Error} 如果数据为空或未定义,则会抛出警告并终止执行。
 */
// example
const data = [
    { name: 'Alice', age: 25, city: 'New York' },
    { name: 'Bob', age: 30, city: 'Los Angeles' }
]
const filterVal = ['name', 'age']
const header = ['Name', 'Age']
exportExcel(data, filterVal, header, 'users.xlsx')

日志

    1.0.5 增加 exportExcel