2012-12-30 2 views
0

목표 : 객체 배열에 주어진 필드에 대해 주어진 값을 가진 객체가 포함되어 있는지 여부를 결정하는 함수를 작성하십시오. 그러한 오브젝트가있는 경우는 오브젝트를 돌려 주어, 그렇지 않은 경우는 false를 돌려줍니다.자바 스크립트 함수에서 예기치 않은 유형 오류

var data = [ 
    {isle: 'VF', item: 'Ginger'}, 
    {isle: 'VF', item: 'Spinach'}, 
    {isle: 'Dairy', item: 'Milk'}, 
    {isle: 'Dairy', item: 'Yogurt'} 
]; 

var objwithPropvalueInarr = function(propname, propvalue, arr){ 
    for(var i=0; i <= arr.length; i++){ 
     if (arr[i][propname] === propvalue) { 
      // console.log('Found object with value ' + propvalue); 
      return arr[i]; 
     } 
    }; 
    return false; 
}; 

코드는 내가 구글 크롬 콘솔에서 위의 코드를 입력. 함수에 대한 다음 호출이 작동합니다 예상대로

objwithPropvalueInarr('isle', 'VF', data) 

라인 위 data[0]를 반환합니다.

그러나, 다음의 호출 (호출 후 표시)를 형식 오류

objwithPropvalueInarr('isle', 'nonexistentpropvalue', data) 

TypeError: Cannot read property 'isle' of undefined 
arguments: Array[2] 
get message: function() { [native code] } 
get stack: function() { [native code] } 
set message: function() { [native code] } 
set stack: function() { [native code] } 
type: "non_object_property_load" 
__proto__: Error 

data[0]['isle'] === 'nonexistentpropvalue' 수익률이 예상대로 false을 반환합니다. 함수의 if 조건이 모든 검사에 대해 false을 반환하지 않으면 끝에 false 값을 반환해야합니다. 누군가가 오류를 설명 할 수 있으면 고맙겠습니다.

감사합니다.

+0

개발자 도구를 사용하면 StackOverflow에서 요청하는 것보다 훨씬 빨리 이러한 문제를 발견 할 수 있습니다. – Daniil

답변

3

변경

for(var i = 0; i <= arr.length; i++) { 

배열의 범위를 벗어난 이동합니다 <=를 사용

for (var i = 0; i < arr.length; i++) { 

합니다. - 1, 방금 도착 [arr.length을 가지고 있도록 배열 길이는 = arr.length이, 마지막 요소의 인덱스가 arr.length 때문에 : 당신이 for(var i=0; i < arr.length; i++){에 코드를 변경해야 becaouse

jsFiddle Demo

+0

+1 잘 관찰 됨. –

+0

감사합니다. 지금, 물론, 작품입니다. 대답을 받아들이려면 8 분을 기다려야합니다. – Curious2learn

0

그것은이다 ]을 null 객체로 사용합니다.

+0

마지막 요소의 색인은'arr.length - 1'입니다. –

관련 문제