2011-05-01 8 views
2

나는 array = []이고 객체를 포함하고 있습니다 ... obj, obj, obj. obj two을 제거해야하지만 인덱스를 모른다 ... obj를 어떻게 제거 할 수 있습니까? 객체의 이름도 같습니다. 나는 그것을 희망배열에서 객체를 제거

답변

4

는 당신을 도와줍니다 :

function removeByElement(array,obj) { 
    for(var i=0; i<array.length;i++) { 
    if(array[i]==obj) { 
     array.splice(i,1); 
     break; 
    } 
    } 
} 

편집 : 루프를 파괴. 인덱스를 모르는 경우

+0

이것은 실제로'===' – Alnitak

+0

오를 사용해야하며 두 개 이상 연속 일치하는 요소가 있으면 실패합니다. – Alnitak

+0

이것은 나쁜 접근입니다. 항목을 지우면'i ++'에서 다음 항목을 건너 뜁니다. 항목을 삭제하면 중단되거나 역순으로 배열을 탐색합니다. –

1
function removeObject(obj, arr) { 
    for (var i = 0; i < arr.length; i++) { 
    if (arr[i] === obj) { 
     arr.splice(i, 1); 
     break; 
    } 
    } 
} 
1

, 모든 요소를 ​​반복하고 그들이 당신을 찾아 한 경우 각을 확인해야하고 delete을.

myarray = myarray.filter(function(val, index, a) { 
    return (val !== obj); 
}); 

Array.filter 당신이 ES5이없는 경우 버전이 사용하기 위의 링크 된 MDN 페이지를 참조하여

var len = your_array.length; 
for(var i=0; i<len;i++){ 
    if(typeof(your_arry[i])=='classOfTypeYouLookFor'){// OR if(your_array[i].property_of_class && your_array[i].property_of_class==some_specific_value){ 
     delete(your_arry[i]); 
    } 
} 
+1

이것은 배열에 구멍이 남을 것입니다. –

+0

질문에 대한 오해가있을 수 있습니다. –

4

이 작업을 수행하는 ES5의 방법입니다.

기술적으로 이것은 원래 배열을 수정하는 것이 아니라 새로운 배열을 만듭니다. 그러나 splice은 다른 매치에서 제시 한 모든 인덱스의 번호를 다시 매겨 야하므로 다른 해답에서 제안 된대로 그리 효율적이지 않습니다. 둘 이상의 매치가있을 경우 계속 반복됩니다.

관련 문제