js 배열 재 활용 (배열 요소 가 대상 인 경우)

3360 단어 js
js 배열
그러나 배열 요소 가 대상 일 때 간단하게 비교 할 수 없고 특정한 방식 으로 각 값 을 옮 겨 다 니 며 이미 나 타 났 는 지 여 부 를 판단 해 야 한다.
왜냐하면:
1. 해시 판단 법 이 라면 대상 이 해시 표 의 아래 표 시 를 하면 자동 으로 문자 형 유형 으로 바 뀌 어 모든 요소 가 같 게 되 는데 이때 판단 방법 은 더 이상 의미 가 없다.보통 마지막 배열 이 하나 밖 에 안 남았어 요.
2. 직접 비교 법 이 라면 대상 이 메모리 에서 인용 에 따라 접근 하기 때문에 속성 값 이 같은 대상 도 같 지 않 고 간단 한 직접 판단 은 더 이상 의미 가 없다.보통 마지막 배열 은 그대로 입 니 다.
 
그래서 값 비 교 를 해 야 돼 요.
물론, 해당 대상 을 문자열 로 바 꿀 수도 있 습 니 다. (기본 적 인 [object] 가 아 닙 니 다.)
 
예 를 들 어:
var array = [
    {a:1,b:2,c:3,d:4},
    {a:11,b:22,c:333,d:44},
    {a:111,b:222,c:333,d:444},
    {a:11,b:22,c:33,d:44},
    {a:11,b:22,c:33,d:444}
    ];

속성 a 에 따라 b 는 배열 을 위해 무 게 를 줄 여야 합 니 다.
그러면 마지막 에 얻 을 수 있 습 니 다.
array = [
    {a:1,b:2,c:3,d:4},
    {a:11,b:22,c:333,d:44},
    {a:111,b:222,c:333,d:444}
    ];
//               
function obj2key(obj, keys){
    var n = keys.length,
        key = [];
    while(n--){
        key.push(obj[keys[n]]);
    }
    return key.join('|');
}
//    
function uniqeByKeys(array,keys){
    var arr = [];
    var hash = {};
    for (var i = 0, j = array.length; i < j; i++) {
        var k = obj2key(array[i], keys);
        if (!(k in hash)) {
            hash[k] = true;
            arr .push(array[i]);
        }
    }
    return arr ;
}
//    
var arr = uniqeByKeys(array,['a','b']);

이런 방식 은 잠시 괜 찮 습 니 다. 물론 그런 속성 과 값 조합 이 나타 나 면 xx 와 같은 것 이 나타 나 면 xx 입 니 다.

좋은 웹페이지 즐겨찾기