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
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);
|
|
}
|
|
}
|
|
|