상세 컨텐츠

본문 제목

Javascript sample 데이터 생성

카테고리 없음

by citykim 2023. 3. 19. 13:45

본문

배열을 전달하여 sample데이터 생성하기

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'...]

 

 

 

(a) loop가 될 배열을 선언해준다 count가 전달되지 않으면 기본값은 10으로 한다

function generator (d, o) {
  const result = new Array(o?.count ? o?.count : 10)
  ...

  return result
}

 

 

 

(b) duplicate가 true일 경우 유니크값을 세팅해준다

유니크 세팅시 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로 넣어준다

 

 

 

(c) 첫번째 parameter 값으로 for loop 탐색하여 data를 생성해준다

이때 데이터는 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
  }

 

 

 

(d) 랜덤 * 배열의 length 값으로 index를 선택한다

이때 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
    }

 

 

 

(e) 배열이 아니라 null로 전달되었다면 랜덤 숫자를 생성해준다

이때 최대값은 maximum 기준으로, 값이없다면 1000까지로 설정하고 floor가 전달되었다면 반올림된 값으로 출력해준다

	const count = Math.random() * (o?.maximum ? o?.maximum : 1000)
    data[key] = o?.floor ? Math.floor(count) : count

 

 

 

 

랜덤 생성기(TS)

lodash 데이터가공 포스팅하는데 데이터 만들기 귀찮아서 함수만들었다가 포스팅

댓글 영역