You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

59 lines
1.3 KiB
JavaScript

"use strict";
const pickRandomWeighted = require("pick-random-weighted");
const syncpipe = require("syncpipe");
let columns = {
color: [ "blue", "black", "brown", "red", "yellow", "gray", "white", "pink", "purple" ],
size: [ "XS", "S", "M", "L", "XL", "XXL" ],
country_id: [ 1, 2, 3, 4, 5 ],
store_id: [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 ],
price: [ 2, 5.50, 12, 20, 22.50 ]
};
function shuffle(arrayReference) {
arrayReference.sort(() => Math.random() - 0.5);
}
function shuffleAllColumns() {
for (let key of Object.keys(columns)) {
shuffle(columns[key]);
}
}
let printColumns = Object.keys(columns);
function printItem(item) {
console.log(printColumns.map((column) => item[column]).join(";"));
}
console.log(printColumns.join(";"));
for (let i = 0; i < 200; i++) {
shuffleAllColumns();
// We do this because we *don't* want an even distribution, to make the data more realistic.
let weightedColumns = Object.entries(columns).map(([ key, values ]) => {
return [
key,
values.map((value, i) => {
return [ value, i ];
})
];
});
for (let i = 0; i < 1000; i++) {
let data = syncpipe(weightedColumns, [
(_) => _.map(([ key, values ]) => {
return [
key,
pickRandomWeighted(values)
];
}),
(_) => Object.fromEntries(_)
]);
printItem(data);
}
}