想测试一下数据库CURD来着,没有数据怎么行?造点假的!
敲代码是个很有意思的事情,下面记录我整个思考过程。
轮廓
随机姓名,究其本质也就是生成随机字母拼起来,那字母在计算机里存的都是ASCII码,JavaScript里有Math.random()
生成随机数,有String.fromCharCode()
将数字转成字母。
看起来是可以实现的。我把这个过程叫做可行性分析。
> new Array(10)
.fill("")
.map(() => String.fromCharCode((Math.random() * 100)))
.join("")
< '\x15-.\x0E\x041"4V\x10'
这里有很多问题,例如可能出现字符之类的,还有些看不出来是什么东西的,大概是特殊字符?
重读了一遍代码后发现,生成的随机数会带有小数点,还要取整一下。
解决
聪明的你应该想到了,ASCII码里65- 90 是大写字母 A- Z;97- 122 是小写字母 a- z。
嗯,只需要控制生成随机数的区间就好了。
取整有一个特别优雅的方式就是使用二进制位运算,因为JavaScript不能对小数进行位运算,都要先转成整数,这里使用右移0 位这个操作来实现。
动手!
自制一个生成随机数工具函数:
// 生成随机数:[n, m)
function random(n, m) {
return (Math.random() * (m - n) + n) >> 0;
}
测试:
> new Array(10)
.fill("")
.map(() => String.fromCharCode(random(65,91))).join("")
< 'NYUDNKTNFU'
嗯,大概是实现了,但这也不像是人名呀,在完善一下!
进一步完善
或许应该是首字母大写,其余是小写,纯用map的话还要判断首项,low了点,不如reduce吧。
> function createUserName() {
// 生成随机数:[n, m)
function random(n, m) {
return (Math.random() * (m - n) + n) >> 0;
}
return new Array(5).fill("").reduce((prev, cur) => {
return prev + String.fromCharCode(random(97, 123));
}, String.fromCharCode(random(65, 91)));
}
> createUserName()
< 'Pvxyuk'
嗯,看起来舒服多了!
效果
import "reflect-metadata";
import { createConnection } from "typeorm";
import { User } from "./entity/User";
// 生成随机姓名
function createUserName() {
// 生成随机数:[n, m)
function random(n, m) {
return (Math.random() * (m - n) + n) >> 0;
}
return new Array(5).fill("").reduce((prev, cur) => {
return prev + String.fromCharCode(random(97, 123));
}, String.fromCharCode(random(65, 91)));
}
// 创建 user实例
function createUser() {
let user = new User();
user.firstName = createUserName();
user.lastName = createUserName();
user.age = Math.random() * 100;
return user;
}
createConnection()
.then(async (connection) => {
const userRepositroy = await connection.getRepository(User);
// let photoToRemove = await userRepositroy.find();
// await userRepositroy.remove(photoToRemove);
for (let index = 0; index < 10; index++) {
const user = createUser();
await userRepositroy.save(user);
}
console.log("Loading users from the database...");
const saveRepository = await userRepositroy.find();
console.log("Loaded users: ", saveRepository);
console.log("Here you can setup and run express/koa/any other framework.");
})
.catch((error) => console.log(error));