通常,我们会在网络开发领域看到随机的、人类可读的鼻涕虫(例如:brave-purple-penguin )。这些蛞蝓提供了数字ID的唯一性,但可以更加有趣和好玩。
如何生成随机蛞蝓
生成随机Slugs的关键是。
- 识别每个Slugs位置中的语篇
- 为每个语篇准备一个词语清单
- 当你迭代这些位置时,从该列表中随机选择。
例如,这些Slugs的一个常见模式是adjective-adjective-noun 。因此,你可能有一个形容词的列表,一个名词的列表,以及一个你的词序列表。
const adjective = ['blue', 'smiley', 'funny', 'smelly'];
const noun = ['brick', 'kangeroo', 'penguin', 'laptop'];
const words = { adjective, noun };
const order = ['adjective', 'adjective', 'noun'];
然后,你可以在你的顺序上map ,从相应的单词列表中随机抓取一个元素。
const selected = order.map((partOfSpeech) => {
const choices = words[partOfSpeech];
return choices[Math.floor(Math.random() * choices.length)];
});
console.log(selected);
// ['funny', 'blue', 'laptop']
最后,你要用一个- 字符来连接这个数组,这样它就有了kebob-cased。
const slug = selected.join('-');
console.log(slug);
// 'funny-blue-laptop'
使用一个包(我写的!)。
当然,这是一个痛苦的过程,因为你必须自己想出这些词,而且它的可配置性不强。而且,你很快就会用完所有的组合。
为了帮助解决这个问题,我做了一个npm 包!它被称为random-word-slugs ,它有超过1500万个蛞蝓组合(而且还在不断增加)!此外,还有一堆配置。此外,还有一堆配置选项,例如能够指定你想要的单词类别。
继续阅读,看看它是如何工作的!
安装
用npm安装
npm i random-word-slugs
用yarn安装
yarn add random-word-slugs
使用方法
random-word-slugs 包可以在没有任何参数的情况下使用,并默认为一个三个字的,以kebab命名的lug。目前,默认配置有15,660,175个独特的slug组合。
import { generateSlug } from 'random-word-slugs';
const slug = generateSlug();
console.log(slug);
// "elegant-green-coat"
generateSlug 函数最多需要两个参数。第一个参数是lug中的numberOfWords (默认为三个),第二个参数是包options 。下面的例子使用了这两个参数,并提供了一个输出标题大小写的选项。
const slug = generateSlug(4, { format: 'title' });
console.log(slug);
// "Elegant Happy Green Coat"
可用选项
options 对象可以有以下键/值对的任何部分集合。
{
format: "kebab" | "camel" | "sentence" | "lower" | "title",
partsOfSpeech: ("adjective" | "noun")[],
categories: {
adjective: ("colors" | "appearance" | etc...)[],
noun: ("person" | "animals" | etc...)[]
}
}
注意,如果提供的话,partsOfSpeech 必须是一个数组,其长度与你所请求的字数相同。如果使用Typescript,编译器将为你检查这一点。
一个完成的options 对象的例子可能是这样的,对于一个三个字的蛞蝓。
const options = {
format: 'camel',
partsOfSpeech: ['adjective', 'noun', 'adjective'],
categories: {
adjective: ['colors', 'appearance'],
noun: ['animals'],
},
};
基于这些选项,我们的输出可能是这样的:blueBearTall 。
选项的类型描述支持
该包暴露了一个RandomWordOptions<N> 类型,其中N 是lug中的单词数。如果你想用这个类型来指定一个选项对象,它可能看起来像这样(尽管一个Partial 选项对象是肯定允许的,而且可能更常见)。
import { RandomWordOptions } from 'random-word-slugs';
const options: RandomWordOptions<3> = {
format: 'title',
categories: {
noun: ['animals', 'places'],
adjective: ['colors', 'emotions'],
},
partsOfSpeech: ['adjective', 'noun', 'adjective'],
};
重要的是,这里的通用3 将强制要求partsOfSpeech 是一个三元素的元组。
类别
categories 选项允许你从一个类别的子集中生成你的随机蛞蝓。也许你只想要彩色的动物。你可以为组成你的随机弹头的形容词和名词指定一个或多个类别。下面是目前资源库中的类别列表。
形容词类别。
- 时间
- 外观
- 颜色
- 条件
- 个性
- 形状
- 尺寸
- 声音
- 味道
- 触摸
- 数量
名词分类。
- 人
- 家庭
- 教育
- 宗教
- 商业
- 动物
- 交通运输
- 事物
- 技术
- 地点
评估组合学
在使用该包时,你可能会好奇有多少种不同的弹头组合存在。该包暴露了一个函数来帮助解决这个问题,叫做totalUniqueSlugs 。这个函数可以在没有参数的情况下使用,并将假设一个三弹头的adjective-adjective-noun 格式。
import { totalUniqueSlugs } from 'random-word-slugs';
const totalSlugs = totalUniqueSlugs();
console.log(totalSlugs);
// 100000
**注意:**这里显示的100000 数字只是一个例子,并不代表包中任何时候的蛞蝓总数(随着单词的增加,这个数字会不断变化)。
如果你有不同数量的词、词的排序或类别的子集,你也可以评估组合空间。在下面的例子中,我们将假设一个四个字的鼻涕虫,顺序为adjective-noun-adjective-noun ,只有颜色的形容词和动物的名词。
import { totalUniqueSlugs } from 'random-word-slugs';
const totalSlugs = totalUniqueSlugs(4, {
partsOfSpeech: ['adjective', 'noun', 'adjective', 'noun'],
categories: {
adjective: ['colors'],
noun: ['animals'],
},
});
console.log(totalSlugs);
// 1000
同样,这个1000 ,只是一个例子。重要的是,这可以帮助你确定你对这个有限的组合空间不满意,你可以选择增加其他类别。