1st Project_day6_11.19

송철진·2022년 11월 19일
0

1st Project

목록 보기
4/13

계획

변수명을 출력하는 함수를 통해 필터링 구문을 모듈화 계획:

const returnVariableName = (obj) => {
  for (let key in obj){
    return key;
  }
}
let gender = ["male", "female"]
console.log(returnVariableName({gender})) // "gender"
  • gender = ["male", "female"] 가 services 레이어에 도달하면
  • 변수명gender를 키로 객체의 값g.id를 불러온다
  • 변수의 값 ["male", "female"]을 g.id = 옆에 더한다
  • where와 or, and를 적당히 붙여 완성!

결과 😓

결과는 대실패..

왜냐? 함수에 입력되는 건 변수명이 아니라 변수에 할당된 값 그자체라서
컴퓨터는 입력된 배열의 이름을 모른다는 것.. => undefined
그럼 let name = returnVariableName({arr})을 따로 빼서
name과 arr 2개의 인자를 넣으면 되지 않을까?
..함수makeCondition()은 함수 makeWhere(arr1,arr2) 내에서 호출할 조건함수로 계획했다
넣을 매개변수가 name1, name2, arr1, arr2 => 복잡하다!

소스코드

const makeCondition = (arr) => {
  let name = returnVariableName({arr});
  let query = "( ";
  for (let i=0; i<arr.length; i++){
    query += `${tableKey[name]} = "${arr[i]}"`;
    if(i === (arr.length-1)){
      return query + " )";
    }
    query += ` OR `;
  }
}

const tableKey = {
  "gender" : "g.name",
  "scent" : "sc.name"
}

const gender = ["male", "female", "unisex"];
const scent = ["citrus", "fruity"];

console.log(makeCondition(gender)); 
// (undefiend = 'male' OR undefiend = 'female' OR undefiend = 'unisex')

const makeWhereConditionMaxTwo = (name1,name2, arr1, arr2) =>{
  if(!arr1 && !arr2){
    return "";
  }else if(!arr1){
    return `WHERE ${makeCondition(name2, arr2)}`
  }else if(!arr2){
    return `WHERE ${makeCondition(name1, arr1)}`
  }else{
    return `WHERE ${makeCondition(name1, arr1)} AND ${makeCondition(name2, arr2)}`
  }
}
profile
검색하고 기록하며 학습하는 백엔드 개발자

0개의 댓글