2013-05-10 2 views
4

Ajax 호출의 반환 된 결과에서 모든 고유 한 Field 이름을 가져 오려고합니다. 그러나 어떤 이유로 든 Field 이름이 DRMrole 인 두 번 계속 표시됩니다. 여기 jQuery 배열의 고유 항목 필터링

난 당신이 볼 수 있듯이 console.log 명령

enter image description here

에서 판독이 여기에 jQuery를

//Construct array to determine unique Field names 
var fieldArray = []; 
$.each(data, function(i, item){ 
    fieldArray.push(item.Field); 
    console.log(item.Field); 
}); 
fieldArray = $.unique(fieldArray); 
console.log(fieldArray); 

을 사용하고있다, 어떤 이유로 DRMrole에 대한 필터링에 두 번 표시 결과. 이것은이 코드를 실행할 때마다 매번 발생하므로 무작위 인 것으로 보이지 않습니다.

+1

길이를 비교할 수 있습니까? 거기에 숨겨진 캐릭터가있을 수 있습니다. – Blender

+6

'$. 고유 '문서 : "문자열이나 숫자가 아닌 DOM 요소의 배열에서만 작동합니다." –

+2

값을 푸시하기 전에 $ .inArray를 사용하여 값이 이미 배열에 있는지 확인하십시오. http://api.jquery.com/jQuery.inArray/ – sbeliv01

답변

14

배열 대신 항상 개체를 사용할 수 있습니다. 각 항목을 개체의 속성으로 배치 할 수 있습니다. 삽입을 시도 각각 동일한 키를 간단하게 기존 무시할 것 :

여기
var fieldArray = {}; // object instead of array 
$.each(data, function(i, item){ 
    fieldArray[item.Field] = item.Field; 
}); 

슈퍼 간단 입니다 example on jsFiddle


(sbeliv01에 의해 a comment에서 언급 한) 또 다른 옵션은하는 것 요소가 이미 존재하는지 테스트하려면 $.inArray() 함수를 사용하십시오.

var fieldArray = []; 
$.each(data, function(i, item){ 
    if ($.inArray(item.Field,fieldArray) === -1){ 
    fieldArray.push(item.Field); 
    } 
}); 

참조 - $.inArray()

+0

도움을 주셔서 감사합니다. 참고 - 두 번째 예제 w /'$ .inArray '는 어떤 이유로 작동하지 않습니다. 'fieldArray'에 빈 배열을 붙였습니다. – NealR

+0

죄송합니다 - 음 ... ..'$ .inArray'에 주었던 매개 변수를보세요 ..'item.Field' 대신'item'을 넣었습니다 ... – Lix

+0

' $ .inArray (item.Field, fieldArray) === -1' 대신에 –

1

또 다른 옵션은 이미 당신을 "uniqueinize"을 원하는 배열이있는 경우

Array.prototype.getUnique = function(){ 
    var u = {}, a = []; 
    for(var i = 0, l = this.length; i < l; ++i){ 
     if(u.hasOwnProperty(this[i])) { 
     continue; 
     } 
     a.push(this[i]); 
     u[this[i]] = 1; 
    } 
    return a; 
} 
-3

VAR X = [2, 3, 6, 3, 2, 5]

x = x.filter (function (a, b, c) {return c.indexOf (a, -c.length)> = true? false;});