didyoumean

中文文档
1.2.2发布于 2021/06/24Apache-2.0CommonJS零依赖近 30 天下载 1.3亿

Match human-quality input to potential matches by edit distance.

原始使用文档
文档目录10 节
  1. Examples
  2. didYouMean(str, list, [key])
  3. Options
  4. threshold
  5. thresholdAbsolute
  6. caseSensitive
  7. nullResultValue
  8. returnWinningObject
  9. returnFirstMatch
  10. License

didYouMean.js - A simple JavaScript matching engine

Available on GitHub.

A super-simple, highly optimized JS library for matching human-quality input to a list of potential matches. You can use it to suggest a misspelled command-line utility option to a user, or to offer links to nearby valid URLs on your 404 page. (The examples below are taken from a personal project, my HTML5 business card, which uses didYouMean.js to suggest correct URLs from misspelled ones, such as dcporter.aws.af.cm/me/instagarm.) Uses the Levenshtein distance algorithm.

didYouMean.js works in the browser as well as in node.js. To install it for use in node:

npm install didyoumean

Examples

Matching against a list of strings:

var input = 'insargrm'
var list = ['facebook', 'twitter', 'instagram', 'linkedin'];
console.log(didYouMean(input, list));
> 'instagram'
// The method matches 'insargrm' to 'instagram'.

input = 'google plus';
console.log(didYouMean(input, list));
> null
// The method was unable to find 'google plus' in the list of options.

Matching against a list of objects:

var input = 'insargrm';
var list = [ { id: 'facebook' }, { id: 'twitter' }, { id: 'instagram' }, { id: 'linkedin' } ];
var key = 'id';
console.log(didYouMean(input, list, key));
> 'instagram'
// The method returns the matching value.

didYouMean.returnWinningObject = true;
console.log(didYouMean(input, list, key));
> { id: 'instagram' }
// The method returns the matching object.

didYouMean(str, list, [key])

  • str: The string input to match.
  • list: An array of strings or objects to match against.
  • key (OPTIONAL): If your list array contains objects, you must specify the key which contains the string to match against.

Returns: the closest matching string, or null if no strings exceed the threshold.

Options

Options are set on the didYouMean function object. You may change them at any time.

threshold

By default, the method will only return strings whose edit distance is less than 40% (0.4x) of their length. For example, if a ten-letter string is five edits away from its nearest match, the method will return null.

You can control this by setting the "threshold" value on the didYouMean function. For example, to set the edit distance threshold to 50% of the input string's length:

didYouMean.threshold = 0.5;

To return the nearest match no matter the threshold, set this value to null.

thresholdAbsolute

This option behaves the same as threshold, but instead takes an integer number of edit steps. For example, if thresholdAbsolute is set to 20 (the default), then the method will only return strings whose edit distance is less than 20. Both options apply.

caseSensitive

By default, the method will perform case-insensitive comparisons. If you wish to force case sensitivity, set the "caseSensitive" value to true:

didYouMean.caseSensitive = true;

nullResultValue

By default, the method will return null if there is no sufficiently close match. You can change this value here.

returnWinningObject

By default, the method will return the winning string value (if any). If your list contains objects rather than strings, you may set returnWinningObject to true.

didYouMean.returnWinningObject = true;

This option has no effect on lists of strings.

returnFirstMatch

By default, the method will search all values and return the closest match. If you're simply looking for a "good- enough" match, you can set your thresholds appropriately and set returnFirstMatch to true to substantially speed things up.

License

didYouMean copyright (c) 2013-2014 Dave Porter.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License here.

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

版本与发布记录

didyoumean 共发布 4 个版本,首次发布于 2013/01/20;过去 12 个月发布了 0 个版本。

版本发布日期距今
1.2.2latest2021/06/245 年前
1.2.12014/09/1512 年前
1.2.02014/03/1612 年前
1.1.02013/01/2013 年前

关于 didyoumean 的常见问题

didyoumean 是什么?

Match human-quality input to potential matches by edit distance.

如何安装 didyoumean?

在项目目录运行 npm install didyoumean,或使用 pnpm add / yarn add / bun add。

didyoumean 支持 TypeScript 吗?

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

didyoumean 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

didyoumean 可以商用吗?

didyoumean 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

didyoumean 的下载量有多少?

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

didyoumean 还在维护吗?

最新版本 1.2.2 发布于 2021/06/24(5 年前);至今共发布 4 个版本,其中过去 12 个月发布了 0 个;首次发布于 2013/01/20。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。