변수명을 출력하는 함수를 통해 필터링 구문을 모듈화 계획:
const returnVariableName = (obj) => {
for (let key in obj){
return key;
}
}
let gender = ["male", "female"]
console.log(returnVariableName({gender})) // "gender"
g.id
를 불러온다g.id =
옆에 더한다결과는 대실패..
왜냐? 함수에 입력되는 건 변수명이 아니라 변수에 할당된 값 그자체라서
컴퓨터는 입력된 배열의 이름을 모른다는 것.. => 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)}`
}
}