
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を使ったコースを公開しました。
よかったらサポートしてください。
簡単ですが、以上です。