見出し画像

chanceライブラリを使ったモックデータの作成~グルーピングを交えて~

こんにちわ。nap5です。


今回は小ネタですが、知っておくと小回りが利く便利だと思うので、紹介します。以前の記事と関連しています。


まぁ、すでにあると思いますが、グルーピング等のワークアラウンドを考慮したやり方として紹介します。



chanceライブラリのドキュメントはこちらです。


グルーピングが肝になるので、以下のライブラリは素振りしておくといいかもです。



結論から書くと、以下のように書くとハンディにデモデータが出来上がります。

chanceインスタンスのコンストラクタに与えるシードは数値の場合は1以上を与えるとよいです。(加筆修正しました。失礼いたしました。)

import { default as chance } from 'chance';
import dayjs from 'dayjs';

Array.prototype.groupSeqNum = function ({ grp }) {
  let group = 0;
  return this.reduce((a, c, i) => {
    group = group + ((i + 1) % grp === 1 ? 1 : 0);
    return [...a, { group, ...c }];
  }, []);
};

const data = [...Array(11)].map((n, index) => {
  return {
    name: chance(index + 1).name(),
    age: chance(index + 1).age(),
    pet: chance(index + 1).animal(),
    ccType: chance(index + 1).cc_type(),
    cc: chance(index + 1).cc(),
    createdAt: dayjs().format(`YYYY-MM-DD`),
    seq: index + 1,
  };
});

const result = data.groupSeqNum({ grp: 4 })

console.table(result);


こちらがアウトプットです。


こちらはクレジットカードごとにグルーピングして番号振った場合です

chanceインスタンスのコンストラクタに与えるシードは数値の場合は1以上を与えるとよいです。(加筆修正しました。失礼いたしました。)

import { default as chance } from 'chance';
import dayjs from 'dayjs';
import * as R from 'ramda';

Array.prototype.groupSeqNum = function ({ grp }) {
  let group = 0;
  return this.reduce((a, c, i) => {
    group = group + ((i + 1) % grp === 1 ? 1 : 0);
    return [...a, { group, ...c }];
  }, []);
};

const data = [...Array(21)].map((n, index) => {
  return {
    name: chance(index + 1).name(),
    age: chance(index + 1).age(),
    pet: chance(index + 1).animal(),
    ccType: chance(index + 1).cc_type(),
    cc: chance(index + 1).cc(),
    createdAt: dayjs().format(`YYYY-MM-DD`),
    seq: index + 1,
  };
});

const a = Object.entries(
  R.groupBy((item) => {
    return item.ccType;
  }, data)
);

const b = a.map(([k, v], i) => {
  return [...v].map((info, j) => {
    return Object.assign({ ...info, grp: i + 1, grpSeq: j + 1 });
  });
});

const c = b.flat().sort((a, b) => {
  return a.grp - b.grp;
});

console.table(c);


こちらがアウトプットです。


ショートハンドにいかがでしょうか?


ライブラリの実行環境によってはモックデータをいつものやり方で生成できないことがあるのですが、chanceライブラリはseedも安定している印象です。


余談ですが、Hashnodeで記事書いています。
よかったらサポートしてください。

最後に、UdemyでFaunaDBを使ったコースを公開しました。
よかったらサポートしてください。


簡単ですが、以上です。


この記事が気に入ったらサポートをしてみませんか?