2013-07-23 4 views
1

나는 개체의 자바 스크립트 배열을 가지고 : 각 개체는 키/값 쌍을 포함하고 있습니다. 이 배열을 반복하고 특정 키 (예 : "Industry")의 값이 주어진 값과 일치하지 않는 개체를 삭제하려고합니다. 여기 내 코드는 전체 배열을 통해 반복 아니에요 어떤 이유로, 그리고 내가 항목을 삭제할 때 루프 카운터 어떻게 든 것이지 것을는 사실을 함께 할 수있는 뭔가가 생각 :jQuery 루프 반복 요소를 통해 반복

var industry = 'testing'; 
var i = 0; 
for (i = 0; i < assets_results.length; i++) { 

    var asset = assets_results[i]; 
    var asset_industry = asset['industry']; 
    if (industry != asset_industry) { assets_results.splice(i,1); } 

} 

어떤 아이디어? 미리 감사드립니다.

+0

당신이 올바른지, 즉 이유입니다. 당신이 1을 잘라내면 2가 1이되고 1은 1이 될 것이므로 하나의 항목은 이미 건너 뛴다. –

+0

이것은 jquery와 아무런 관련이 없다. –

+0

간단한 해결책 : 역순으로 배열을 반복한다. –

답변

0

하나의 요소를 연결할 때 배열 크기가 1 씩 감소하기 때문입니다. 스플 라이스 이후의 모든 요소는 한 위치를 배열의 시작으로 이동시키고 스플 라이스 된 공간의 공간을 채 웁니다. 따라서 코드는 하나의 요소를 잃어 버립니다.이 코드를 작성하십시오.

var industry = 'testing'; 
var i = 0; 
for (i = 0; i < assets_results.length; i++) { 

    var asset = assets_results[i]; 
    var asset_industry = asset['industry']; 
    if (industry != asset_industry) { 
       assets_results.splice(i,1); 
       i--; 
    } 

} 
+1

감사합니다. Aneesh,이 코드는 사용이 끝났습니다. 훌륭한 작품입니다. – GluePear

0

스플 라이스 배열에서 요소를 제거하고 크기를 조정 :

var arra = ['A', 'B', 'C', 'D']; 
arr.splice(1,2); // -> ['A', 'D']; 

당신이 스플 라이스 때 다음 요소를 건너 때문에, 난을 증가시키지 것을 의미합니다. 스 플라이 싱은 i + 2 요소를 i + 1 요소로 만듭니다.

var industry = 'testing'; 

for (var i = 0, max = assets_results.length; i < max;) { // Accessing a property is expensive. 
    if (industry != assets_results[i]['industry']) { 
     assets_results.splice(i,1); 
    } else { 
     ++i; 
    } 
} 
0

이 문제는 반복되는 동안 개체를 수정할 때 발생합니다. 이 문제를 피하는 가장 좋은 방법은 테스트에 실패하면 기존 배열에서 쌍을 삭제하고 새 배열을 만들고 테스트에 합격하면 쌍을 추가하는 것입니다.

var industry = 'testing'; 
var i = 0; 
var asset_results_filtered = []; 

for (i = 0; i < assets_results.length; i++) { 
    if (industry == assets_results[i]) { 
     asset_results_filtered.push(assets_results[i]); 
    } 
} 

EDIT : 코드가 약간 비논리적 인 것처럼 보입니다. 주어진 변수를 사용하도록 예제를 수정했습니다.

0

대신을 시도해보십시오

var industry = 'testing'; 
var i = assets_results.length - 1; 
for (; i > 0; i--) { 

    var asset = assets_results[i], 
     asset_industry = asset['industry']; 
    if (industry != asset_industry) { assets_results.splice(i,1); } 

}