# @devoxa/flocky 中文文档

规范地址：https://npmcn.com/package/%40devoxa/flocky/

版本：3\.1\.1
npm 元数据更新时间：2026-05-05T23:29:02.078Z
中文译文更新时间：2026-11-12T03:55:09.136Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40devoxa/flocky
原文对照：https://npmcn.com/package/%40devoxa/flocky/?lang=original
源码仓库：https://github.com/devoxa/flocky

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：506 kB，454 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：未声明
- 运行依赖：0 个
- 首次发布：2021-07-05T04:28:48.550Z
- 最新版本发布：2026-05-05T23:29:01.954Z
- 近 30 天下载量：18649（2026-10-12 至 2026-11-10，npm 官方下载统计）
- 已发布版本数：20（近 12 个月 1 个）

## 中文简介

一个核心内容明确、效率高、没有依赖关系的公用图书馆

## 安装

```sh
npm install @devoxa/flocky
```

也可以使用：`pnpm add @devoxa/flocky`、`yarn add @devoxa/flocky`、`bun add @devoxa/flocky`

## README

# 闪亮

#### 一个核心内容明确、效率高、没有依赖关系的公用图书馆

 [![Package Version](https://img.shields.io/npm/v/@devoxa/flocky?style=flat-square)](https://www.npmjs.com/package/@devoxa/flocky)[![Build Status](https://img.shields.io/github/actions/workflow/status/devoxa/flocky/push.yml?branch=master&style=flat-square) ](https://github.com/devoxa/flocky/actions?query=branch%3Amaster+workflow%3A%22Continuous+Integration%22)[![Code Coverage](https://img.shields.io/codecov/c/github/devoxa/flocky/master?style=flat-square)](https://codecov.io/github/devoxa/flocky)

[安装](https://npmcn.com/package/%40devoxa/flocky/#readme-installation) 二. 支助 [使用量](https://npmcn.com/package/%40devoxa/flocky/#readme-usage) 二. 支助 [API 参考](https://npmcn.com/package/%40devoxa/flocky/#readme-api-reference) 二. 支助 [贡献者](https://npmcn.com/package/%40devoxa/flocky/#readme-contributors) 二. 支助 [许可证](https://npmcn.com/package/%40devoxa/flocky/#readme-license)

  

## 安装

```bash
yarn add @devoxa/flocky
```

## 使用量

```ts
import { sum } from '@devoxa/flocky'
sum([1, 2, 3])
// -> 6
```

## API 参考

### 平均数( 阵列)

计算数组中的数值平均值.

```js
flocky.average([1, 4, 2, -4, 0])
// -> 0.6
```

[来源](https://npmcn.com/package/%40devoxa/flocky/src/average/average.ts) • 减少:75 B 减少:77 B

### 块( 阵列, 大小)

将一系列元素分成 `size`。 。 。 . 如果阵列无法平分,则最终块会包含剩余元素.

```js
flocky.chunk([1, 2, 3, 4, 5, 6, 7], 3)
// -> [[1, 2, 3], [4, 5, 6], [7]]
```

[来源](https://npmcn.com/package/%40devoxa/flocky/src/chunk/chunk.ts) • 减少:105 B 减少和减少:101 B

### 夹口( 值、 分、 最大)

将最小和最大范围内的值插入(包括).

```js
flocky.clamp(3, 0, 5)
// -> 3

flocky.clamp(10, 0, 5)
// -> 5

flocky.clamp(-10, 0, 5)
// -> 0
```

[来源](https://npmcn.com/package/%40devoxa/flocky/src/clamp/clamp.ts) • 减少:69 B • 减少和减少GZIP:66 B

### 克隆( 值)

创建深克隆 `value`。 。 。 . 这种方法只支持原生到JSON的类型,因此所有原始类型,阵列和对象.

```js
const original = [{ a: 1 }, { b: 2 }]
const clone = flocky.clone(original)
original[0] === clone[0]
// -> false
```

[来源](https://npmcn.com/package/%40devoxa/flocky/src/clone/clone.ts) • 减:69 B • 减:69 B

### 压缩( 阵列)

创建一个带有所有 falsy () 的阵列`undefined`, (中文(简体) ), `null`, (中文(简体) ), `false`, (中文(简体) ), `0`, (中文(简体) ), `NaN`, (中文(简体) ), `''`) 数值被删除.

```js
flocky.compact([1, 2, 3, null, 4, false, 0, NaN, 5, ''])
// -> [1, 2, 3, 4, 5]
```

[来源](https://npmcn.com/package/%40devoxa/flocky/src/compact/compact.ts) • 减少:61 B • 减少和减少GZIP:64 B

### 卸下( 已失效, 等待)

创建延迟引用的已撤销函数 `func` 直至 `wait` 毫秒 自上次启用已解开的函数以来已过期.

```js
const func = () => console.log('Heavy processing happening')
const debouncedFunc = flocky.debounce(func, 250)
```

[来源](https://npmcn.com/package/%40devoxa/flocky/src/debounce/debounce.ts) • 减:129 B • 减:112 B

### 重复( 阵列, 身份 )

创建一个数组的版本,只保留重复的元素. 结果值的顺序由它们在数组中发生的顺序决定. 可以通过一个可选的 `identity` 函数来选择对象的标识部分.

```js
flocky.duplicates([1, 1, 2, 4, 2, 1, 6])
// -> [1, 2, 1]

flocky.duplicates(['foo', 'bar', 'foo', 'foobar'])
// -> ['foo']

const input = [{ id: 1, a: 1 }, { id: 1, a: 2 }, { id: 2, a: 3 }, { id: 1, a: 4 }]
flocky.duplicates(input, (element) => element.id)
// -> [{ id: 1, a: 2 }, { id: 1, a: 4 }]
```

[来源](https://npmcn.com/package/%40devoxa/flocky/src/duplicates/duplicates.ts) • 减少:271 B 减少:145 B

### 逃出RegExp( 字符串)

在正则表达式中使用的字符串中逃避特殊字符.

```js
flocky.escapeRegExp('Hey. (1 + 1 = 2)')
// -> 'Hey\\. \\(1 \\+ 1 = 2\\)'
```

[来源](https://npmcn.com/package/%40devoxa/flocky/src/escapeRegExp/escapeRegExp.ts) • 减:93 B • 减:90 B

### 平坦( 对象)

将嵌入对象平分为带有点标记键的对象.

```js
flocky.flatten({ a: { b: 1, c: 2 }, d: { e: { f: 3 } } })
// -> { 'a.b': 1, 'a.c': 2, 'd.e.f': 3 }
```

[来源](https://npmcn.com/package/%40devoxa/flocky/src/flatten/flatten.ts) • 减少:172 B 减少和减少GZIP:136 B

### 获取( 对象、 路径、 默认值 ?)

获取值为 a `path` 一、导 言 `object` (带有可选内容) `defaultValue`(中文(简体) )

: 警告: **使用此方法会忽略类型信息, 您将拥有 键入返回类型。 如果你可以的话,总比进入好 属性,例如“可选链”运算符.**

```js
const object = {a: {b: {c: 1}}}
flocky.get(object, 'a.b.c')
// -> 1

const object = {a: {b: {c: 1}}}
flocky.get(object, 'x.x.x')
// -> undefined

const object = {a: {b: {c: 1}}}
flocky.get(object, 'x.x.x', 'default')
// -> 'default'
```

[来源](https://npmcn.com/package/%40devoxa/flocky/src/get/get.ts) 二. 支助 [基准](https://npmcn.com/package/%40devoxa/flocky/src/get/BENCHMARK.md) • 减少:424 B 减少:266 B

### hash( 数据)

创建一个散列字符串来表示数据中传递的内容.

: 警告: **3⁄4 ̄ ̧漯B [`Argon2id`, (中文(简体) ), `scrypt` 或者说 `bcrypt`](https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html#password-hashing-algorithms) 任何安全相关的东西.**

```js
flocky.hash('some really long string')
// -> 'x1nr7uiv'

flocky.hash({id: 'AAA', name: 'BBB'})
// -> 'x16mynva'
```

执行细节

这种方法使用Murmur3,因为它很小,速度快,而且相当好 相撞特性(约3600年有1个).

-   [https://software engineering.stack exchange.com/ questions/49550 互联网档案馆的存檔,存档日期2014-12-20](https://softwareengineering.stackexchange.com/questions/49550)
-   [https://github.com/活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活泼活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活](https://github.com/VowpalWabbit/vowpal_wabbit/wiki/murmur2-vs-murmur3)
-   [https://en.wikipedia.org/wiki/穆尔穆尔哈什](https://en.wikipedia.org/wiki/MurmurHash)
-   [https://github.com/whitequark/murmurhash3-js/blob/master/murmurhash3.js. 中国植物物种信息数据库](https://github.com/whitequark/murmurhash3-js/blob/master/murmurhash3.js)

[来源](https://npmcn.com/package/%40devoxa/flocky/src/hash/hash.ts) 二. 支助 [基准](https://npmcn.com/package/%40devoxa/flocky/src/hash/BENCHMARK.md) • 减少:554 B 减少:334 B

### 标识符( )

用 UUID v4 格式生成随机标识符 .

```js
flocky.identifier()
// -> 'bfc8d57e-b9ab-4245-836e-d1fd99602e30'
```

[来源](https://npmcn.com/package/%40devoxa/flocky/src/identifier/identifier.ts) • 减少:275 B 减少:196 B

### 匹配全部( regExp, 字符串)

在字符串中查找正则表达式的所有匹配 .

```js
flocky.matchAll(/f(o+)/g, 'foo bar baz foooo bar')
// -> [
// ->   { match: 'foo', subMatches: ['oo'], index: 0 },
// ->   { match: 'foooo', subMatches: ['oooo'], index: 12 },
// -> ]
```

[来源](https://npmcn.com/package/%40devoxa/flocky/src/matchAll/matchAll.ts) • 减轻:178 B 减轻和减轻全球污染:133 B

### 最大( 阵列)

计算数组中数值的最大值.

```js
flocky.max([1, 4, 2, -3, 0])
// -> 4
```

[来源](https://npmcn.com/package/%40devoxa/flocky/src/max/max.ts) • 减少:58个B 减少和减少GZIP:63个B

### 提醒( 关闭, 选项 )

创建一个函数, 记住返回值 `func`。 。 。 .

```js
const func = (a, b) => a + b
const memoizedFunc = flocky.memoize(func)
const memoizedFuncWithTtl = flocky.memoize(func, { ttl: 30 * 1000 })
memoizedFunc(1, 2)
// -> 3
```

执行细节

采用这种方法的依据是: [快速记忆](https://github.com/caiogondim/fast-memoize.js), (中文(简体) ), 和基于 TTL 缓存的额外支持.

[来源](https://npmcn.com/package/%40devoxa/flocky/src/memoize/memoize.ts) 二. 支助 [基准](https://npmcn.com/package/%40devoxa/flocky/src/memoize/BENCHMARK.md) • 减少:956 B 减少:439 B

### 分钟( 阵列)

计算数组中数值的最小值.

```js
flocky.min([1, 4, 2, -3, 0])
// -> -3
```

[来源](https://npmcn.com/package/%40devoxa/flocky/src/min/min.ts) • 减少:58个B 减少和减少GZIP:63个B

### 省略( 对象, 密钥)

创建一个由所有未在 `keys`。 。 。 .

```js
const object = { a: 1, b: 2, c: 3 }
flocky.omit(object, ['a'])
// -> { b: 2, c: 3 }
```

[来源](https://npmcn.com/package/%40devoxa/flocky/src/omit/omit.ts) 二. 支助 [基准](https://npmcn.com/package/%40devoxa/flocky/src/omit/BENCHMARK.md) • 减少:143个B 减少:129个B

### 百分位数( 阵列, k)

计算数组中数值的千分百分数.

```js
flocky.percentile([90, 85, 65, 72, 82, 96, 70, 79, 68, 84], 0.9)
// -> 90.6
```

[来源](https://npmcn.com/package/%40devoxa/flocky/src/percentile/percentile.ts) • 减:215 B • 减:并减:154 B

### 选择( 对象, 密钥)

创建由指定对象组成的对象 `keys`。 。 。 .

```js
const object = { a: 1, b: 2, c: 3 }
flocky.pick(object, ['a', 'c'])
// -> { a: 1, c: 3 }
```

[来源](https://npmcn.com/package/%40devoxa/flocky/src/pick/pick.ts) 二. 支助 [基准](https://npmcn.com/package/%40devoxa/flocky/src/pick/BENCHMARK.md) • 减少:97个B 减少:93个B

### 承诺Pool( 保证功能, 限制)

与有限的货币平行运行多个返回承诺函数.

```js
await flocky.promisePool([
  () => Promise.resolve(1),
  () => Promise.resolve(2),
  () => Promise.resolve(3),
  () => Promise.resolve(4),
], 2)
// -> [1, 2, 3, 4]
```

[来源](https://npmcn.com/package/%40devoxa/flocky/src/promisePool/promisePool.ts) • 减轻:180 B 减轻和减轻全球污染:142 B

### 承诺超时( 保证, 超时)

如果承诺不能在内部达成,就拒绝承诺 `timeoutMs`。 。 。 .

: 警告: **当超时时, 承诺将被拒绝。 不过, 由于承诺无法兑现,承诺本身将继续履行 直至它解决或拒绝.**

```js
await flocky.promiseTimeout(Promise.resolve(1), 10)
// -> 1
```

[来源](https://npmcn.com/package/%40devoxa/flocky/src/promiseTimeout/promiseTimeout.ts) • 减少:301 B 减少:179 B

### 随机( 下, 上, 浮?)

生成随机数字 `lower` 财务报告和审定财务报表 `upper` (包含). 若为 `float` 真实或 `lower` 或者说 `upper` 是一个浮标,一个浮标是返回而不是整数.

```js
flocky.random(1, 10)
// -> 8

flocky.random(1, 20, true)
// -> 14.94849340769861

flocky.random(2.5, 3.5)
// -> 3.2341312319841373
```

[来源](https://npmcn.com/package/%40devoxa/flocky/src/random/random.ts) • 减轻损失:219 B 减轻损失:128 B

### 随机结构( 长度)

生成一个随机的字母数字字符串 `length` 字符键.

```js
flocky.randomString(5)
// -> 'tfl0g'
```

[来源](https://npmcn.com/package/%40devoxa/flocky/src/randomString/randomString.ts) • 减少:230 B 减少:201 B

### 范围( 启动、 结束、 步骤)

生成数组从 `start` 最高和包括 `end`。 。 。 .

```js
flocky.range(0, 5)
// -> [0, 1, 2, 3, 4, 5]

flocky.range(-5, -10)
// -> [-5, -6, -7, -8, -9, -10]

flocky.range(-6, -12, 2)
// -> [-6, -8, -10, -12]
```

[来源](https://npmcn.com/package/%40devoxa/flocky/src/range/range.ts) • 减少:131 B • 减少和减少GZIP:111 B

### 圆通( 数, 精确度)

圆向浮点数 `precision` 小数位.

```js
flocky.roundTo(3.141592653589, 4)
// -> 3.1416

flocky.roundTo(1.005, 2)
// -> 1.01

flocky.roundTo(1111.1, -2)
// -> 1100
```

执行细节

这种方法通过调整 Expendent 部分来避免浮点错误 数字的字符串表示法而不是相乘和相分 拥有10个权力。 执行的依据是 [此示例](https://stackoverflow.com/a/60098416) 林伟丽著.

[来源](https://npmcn.com/package/%40devoxa/flocky/src/roundTo/roundTo.ts) • 消化:209 B 消化和GZIP:150 B

### 样本( 阵列)

从 `array`。 。 。 .

```js
flocky.sample([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
// -> 8
```

[来源](https://npmcn.com/package/%40devoxa/flocky/src/sample/sample.ts) • 减少:79个B 减少:79个B

### 洗牌( 阵列)

创建一系列被洗涤的值 .

```js
flocky.shuffle([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
// -> [3, 7, 2, 1, 10, 4, 6, 9, 5, 8]
```

执行细节

这种方法使用现代版本的 [费舍尔-耶茨洗牌](https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#The_modern_algorithm)。 。 。 .

[来源](https://npmcn.com/package/%40devoxa/flocky/src/shuffle/shuffle.ts) • 减少:152个B 减少和减少GZIP:131个B

### 睡眠( 分钟)

回到一个等待的承诺 `ms` 解决前的毫秒.

```js
await flocky.sleep(25)
```

[来源](https://npmcn.com/package/%40devoxa/flocky/src/sleep/sleep.ts) • 减:71 B • 减:76 B

### 拼写( 字符串)

生成一个字符串的 URL 安全弹片 .

```js
flocky.slugify(' Issue #123 is _important_! :)')
// -> 'issue-123-is-important'
```

[来源](https://npmcn.com/package/%40devoxa/flocky/src/slugify/slugify.ts) • 减少:114 B 减少:104 B

### 总数( 阵列)

计算数组中值的总和.

```js
flocky.sum([1, 4, 2, -4, 0])
// -> 3
```

[来源](https://npmcn.com/package/%40devoxa/flocky/src/sum/sum.ts) • 减少:58个B 减少:65个B

### 节流管( 日出, 等等)

创建调用节奏函数 `func` 最多每个 `wait` 毫秒长. 如果引用被节制, `func` 将在最后提供的论点中援引.

```js
const func = () => console.log('Heavy processing happening')
const throttledFunc = flocky.throttle(func, 250)
```

[来源](https://npmcn.com/package/%40devoxa/flocky/src/throttle/throttle.ts) • 减少:207 B 减少:155 B

### 到Map( 阵列、 密钥、 目标? )

创建搜索地图 `array` 对象列表,并查看 `key` 和可选 `target`。 。 。 .

```js
flocky.toMap(
  [
    { id: 1, name: 'Stanley', age: 64 },
    { id: 2, name: 'Juliet', age: 57 },
    { id: 3, name: 'Alex', age: 19 }
  ],
  'id'
)
// -> {
// ->   1: { id: 1, name: 'Stanley', age: 64 },
// ->   2: { id: 2, name: 'Juliet', age: 57 },
// ->   3: { id: 3, name: 'Alex', age: 19 }
// -> }

flocky.toMap(
  [
    { id: 1, name: 'Stanley', age: 64 },
    { id: 2, name: 'Juliet', age: 57 },
    { id: 3, name: 'Alex', age: 19 }
  ],
  'name',
  'age'
)
// -> { Stanley: 64, Juliet: 57, Alex: 19 }
```

[来源](https://npmcn.com/package/%40devoxa/flocky/src/toMap/toMap.ts) • 减:93 B 减:92 B

### 未平面( 对象)

将带有点标记键的对象解充为嵌入对象.

```js
flocky.unflatten({ 'a.b': 1, 'a.c': 2, 'd.e.f': 3 })
// -> { a: { b: 1, c: 2 }, d: { e: { f: 3 } } }
```

[来源](https://npmcn.com/package/%40devoxa/flocky/src/unflatten/unflatten.ts) • 减轻损失:199 B 减轻损失:145 B

### 独一无二( 阵列, 身份 )

创建一个数组的无重复版本,其中只保留每个元素的首次出现. 结果值的顺序由它们在数组中发生的顺序决定. 可以通过一个可选的 `identity` 函数来选择对象的标识部分.

```js
flocky.unique([1, 1, 2, 4, 2, 1, 6])
// -> [1, 2, 4, 6]

flocky.unique(['foo', 'bar', 'foo', 'foobar'])
// -> ['foo', 'bar', 'foobar']

const input = [{ id: 1, a: 1 }, { id: 1, a: 2 }, { id: 2, a: 3 }, { id: 1, a: 4 }]
flocky.unique(input, (element) => element.id)
// -> [{ id: 1, a: 1 }, { id: 2, a: 3 }]
```

[来源](https://npmcn.com/package/%40devoxa/flocky/src/unique/unique.ts) 二. 支助 [基准](https://npmcn.com/package/%40devoxa/flocky/src/unique/BENCHMARK.md) • 减少:234 B • 减少和减少:150 B

## 贡献者

感谢这些伟大的人[emoji 密钥](https://allcontributors.org/docs/en/emoji-key):

<table><tbody><tr><td align="center"><a href="https://www.david-reess.de/" rel="nofollow noopener noreferrer"><img alt="" src="https://avatars3.githubusercontent.com/u/4615516?v=4?s=75" width="75px;" loading="lazy" decoding="async" referrerpolicy="no-referrer"><br><sub><b>大卫·瑞斯</b></sub></a><br><a href="https://github.com/devoxa/flocky/commits?author=queicherius" title="Code" rel="nofollow noopener noreferrer">💻</a> <a href="https://github.com/devoxa/flocky/commits?author=queicherius" title="Documentation" rel="nofollow noopener noreferrer">📖</a> <a href="https://github.com/devoxa/flocky/commits?author=queicherius" title="Tests" rel="nofollow noopener noreferrer">⚠️</a></td><td align="center"><a href="https://github.com/atjeff" rel="nofollow noopener noreferrer"><img alt="" src="https://avatars1.githubusercontent.com/u/10563763?v=4?s=75" width="75px;" loading="lazy" decoding="async" referrerpolicy="no-referrer"><br><sub><b>杰夫・哈吉</b></sub></a><br><a href="https://github.com/devoxa/flocky/commits?author=atjeff" title="Code" rel="nofollow noopener noreferrer">💻</a></td><td align="center"><a href="https://gw2treasures.com/" rel="nofollow noopener noreferrer"><img alt="" src="https://avatars2.githubusercontent.com/u/2511547?v=4?s=75" width="75px;" loading="lazy" decoding="async" referrerpolicy="no-referrer"><br><sub><b>达尔斯迈姆</b></sub></a><br><a href="https://github.com/devoxa/flocky/commits?author=darthmaim" title="Code" rel="nofollow noopener noreferrer">💻</a></td></tr></tbody></table>

本项目遵循 [全部贡献者](https://github.com/all-contributors/all-contributors) 规格。 任何捐款都欢迎!

## 许可证

麻省理工学院

## 常见问题

### @devoxa/flocky 是什么？

一个核心内容明确、效率高、没有依赖关系的公用图书馆

### 如何安装 @devoxa/flocky？

在项目目录运行 npm install @devoxa/flocky，或使用 pnpm add / yarn add / bun add。

### @devoxa/flocky 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/devoxa\_\_flocky 是否存在。

### @devoxa/flocky 支持 ESM 还是 CommonJS？

同时提供 ES Module 与 CommonJS 入口，import 和 require\(\) 都可以使用，打包工具会自动选择合适的版本。

### @devoxa/flocky 可以商用吗？

@devoxa/flocky 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @devoxa/flocky 的下载量有多少？

根据 npm 官方下载统计，@devoxa/flocky 在 2026/10/12 – 2026/11/10 这 30 天内被下载 18,649 次，日均约 622 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @devoxa/flocky 还在维护吗？

最新版本 3\.1\.1 发布于 2026/05/06（6 个月前）；至今共发布 20 个版本，其中过去 12 个月发布了 1 个；首次发布于 2021/07/05。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

