使用随机数据生成数组而不使用for循环

时间:2017-03-17 15:42:55

标签: javascript arrays factory factory-pattern faker

我正在使用faker.js库生成随机数据,我有几个工厂函数可以生成一系列用户数据:

    const createUser = () => {
      return {
        name: faker.name.findName(),
        email: faker.internet.email(),
        address: faker.address.streetAddress(),
        bio: faker.lorem.sentence(),
        image: faker.image.avatar()
      }
    }

    const createUsers = (numUsers = 5) => {
      return Array(numUsers).fill(createUser());
    }

    let fakeUsers = createUsers(5)
    console.log(fakeUsers)

Array.fill方法的问题在于它返回相同的数据n次。我希望从我的工厂退回5个不同的用户。

我该怎么做?

4 个答案:

答案 0 :(得分:6)

创建一个包含空格的数组,然后使用<textarea (change)="textAreaEmpty(textValue.value)" #textValue></textarea> 创建用户:

.map()

答案 1 :(得分:4)

Array.from允许您创建一个数组并使用回调函数返回的值进行初始化:

const createUsers = (numUsers = 5) => {
    return Array.from({length: numUsers}, createUser);
}

答案 2 :(得分:1)

通过Array构造函数创建数组将产生不可映射(或可迭代)数组。

这是因为构造函数会为您提供一个包含X未初始化值的数组,导致 map 失败。使用填充初始化值,即使初始化为nullundefined,也可以使用:

const createUser = () => {
  return {
    name: faker.name.findName(),
    email: faker.internet.email(),
    address: faker.address.streetAddress(),
    bio: faker.lorem.sentence(),
    image: faker.image.avatar()
  }
}

const createUsers = (numUsers = 5) => {
  return new Array(numUsers)
    .fill(undefined)
    .map(createUser);
}

let fakeUsers = createUsers(5)
console.log(fakeUsers)

https://jsbin.com/punesorico/edit?html,js,console

答案 3 :(得分:1)

以下是通过TCO递归函数完成此工作的另一种方法;

&#13;
&#13;
const createStoreWithMiddleware = applyMiddleware(promiseMiddleware)(createStore); // App works again
&#13;
&#13;
&#13;