2012-05-28 5 views
1

현재 작업하고있는 프로젝트에 대한면 처리 된/필터링 검색을 구축하고 있으며이를 수행하는 데 도움이되는 함수 (또는 jquery 플러그인)를 찾고 있습니다. 이 전 다음과 같은 객체가 있다고 가정 해 봅시다 :JavaScript에서 옵션 배열/객체 빌드 및 유지

var options = { 
    "country": 2, 
    "Gender": 1 
} 

그때 함수라는 필터가(). 내가 토글/추가/업데이트하려는 옵션의 키와 값을 필터에 전달합니다. 내 현재 기능이 나에게 아무런 문제도 일으키지 않으며 게시하기에 충분하도록 디버깅하는 토끼 구멍에서 너무 멀리 떨어져있다.

filter('country', 3); 

이 새로운 값으로 '3'이하는 '국가'키를 업데이트 할 것 : 기본적으로 나는이 있습니다.

filter('Age Group', 4); 

은 해당 키/값 쌍을 옵션 개체에 추가합니다.

filter('Gender', 1); 

개체에서 '성별'키가 완전히 제거됩니다.

올바른 방향으로 어떤 점을 주시면 감사하겠습니다.

답변

3

방법이 분명 구현에 대한 :

​function filter(o, key, val)​ { 
    if (o.hasOwnProperty(key) && o[key] == val) { 
     delete o[key];  
    } else { 
     o[key] = val; 
    } 
} 

?

1

난이 좋을 것 다음 key 객체의 속성으로 존재하지 않는 경우

​function filter(o, key, val)​ { 
    if (o[key] === val) { 
     delete o[key];  
    } else { 
     o[key] = val; 
    } 
} 

, 다음 o[key]val은 그래서 키/값을 추가합니다 일치하지 않습니다 undefined 될 것입니다.

key이있는 경우

하지만 val는 일치하지 않습니다 key이 존재하고 val 일치,이 키를 제거 할 경우는 키/값을

을 설정합니다.

참고 : ===을 사용하여 비교에 자동 유형 변환이 없는지 확인하는 것이 중요합니다.


또는, 당신은 자동으로 options 변수로 작동하는 기능을 원하는 경우에, 당신이 사용할 수 있습니다 개인적으로, 나는 당신이 명시 적으로는 setkey 및 removeKey을 할 경우 코드를 읽기 쉽게 생각

​function filter(key, val)​ { 
    if (options[key] === val) { 
     delete options[key];  
    } else { 
     options[key] = val; 
    } 
} 

을 키가 이전에 존재하는지 여부와 일치하는지 여부에 따라이 변수 연산보다는 함수를 사용합니다.