抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

想测试一下数据库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));

image-20210925205837122

评论