1. 함수의 첫번째 parameter(data)는 Object<{[key:string]: Array<number|string> | null}> 형태의 n개의 값을 전달한다
2. 두번째 prarmeter(option)는 Object<count: number, duplicate: boolean, maximum: number, floor: boolean}>을 전달한다
3. count(생성갯수), duplicate(중복여부), maximum(숫자생성 최대값), floor(반올림)
// 함수에 사용될 임의값
const tier = ['IRON','BRONZE'...]
const users = ['pellentesque','dignissim'...]
function generator (d, o) {
const result = new Array(o?.count ? o?.count : 10)
...
return result
}
유니크 세팅시 new Set()을 활용하여 배열의 value가 unique하도록 만들어준다
// ...(a)code
const unique = new Object()
if (!o?.duplicate) {
for(const key in d) {
const u = [...new Set(d[key])]
unique[key] = {
data: d[key] ? u : null,
duplicate: u.length < o?.count ? true : o?.duplicate
}
}
}
duplicate가 false일경우 중복을 출력하지 않기위해 splice를 사용해야하므로 data를 새로운 배열로 만들어주고,
전달된 배열의 length가 count보다 낮으면 중복제거를 할 수 없기 때문에 duplicate를 false로 그 외는 options 값으로 중복제거 여부를 저장해둔다
값이 전달되지 않으면 배열탐색을 하지않고 랜덤 숫자를 생성해야하기 때문에 null로 넣어준다
이때 데이터는 Array<{foo: bar, some: thing}> 형태로 전달된 배열의 key값으로 생성한다
// ...(b)code
for (let i=0; i<result.length; i++) {
const data = {}
for(const key in d) {
if (d[key]) {
// ...(d)code
} else {
// ...(e)code
}
}
result[i] = data
}
이때 duplicate가 true면 값을 그냥 입력하고 false라면 splice하여 기존값을 삭제, 중복을 제거하도록 한다
const random = Math.floor(Math.random() * unique[key].data.length)
if (unique[key].duplicate) {
data[key] = unique[key].data[random]
} else {
const u = unique[key].data.splice(random, 1)[0]
data[key] = u
}
이때 최대값은 maximum 기준으로, 값이없다면 1000까지로 설정하고 floor가 전달되었다면 반올림된 값으로 출력해준다
const count = Math.random() * (o?.maximum ? o?.maximum : 1000)
data[key] = o?.floor ? Math.floor(count) : count
lodash 데이터가공 포스팅하는데 데이터 만들기 귀찮아서 함수만들었다가 포스팅
댓글 영역