2016-07-11 1 views
0

Google Maps API를 사용하면 동일한 객체 내의 배열 내의 값으로 객체 내의 키 값을 찾을 수 있기를 원합니다. 나는 할 수 있도록 객체에 "street_number"를 찾을 수 있도록하려면배열 값을 사용하여 상위 객체의 키 값 찾기

results: { 
    address_components [ 
     0: Object: { 
      long_name: "704", 
      short_name: "704", 
      types [ 
       0:"street_number" 
      ] 
     } 
     1: Object {...} 
     2: Object {...} 
     3: Object {...} 
    ] 
    place_id:"8AS8D8F8A881C81DA6S6D8" 
} 

: I 콘솔을보기 위해 내 페이지에서의 "요소 검사"할 때, 여기 객체 구조의 측면에서 보여줍니다 것입니다 해당 객체에 상주하는 "704"의 해당 값을 찾습니다.

까다로운 부분은 "address_compenents"내의 값이 항상 같은 순서가 아니므로 results[0].address_components[0].long_name을 내 자바 스크립트에서 찾을 수 없다는 것입니다. 나는이 프로젝트에서 javascript로 제한되어 있으므로 해당 언어의 모든 답변을 매우 높이 평가할 수 있습니다. 미리 감사드립니다.

참고 : 문제를 해결하는 데 도움이된다면 lodash 나 밑줄과 같은 라이브러리를 사용하는 것에 반대하지 않습니다.

+0

관련된 질문 : 역 지오 코딩의 예에서의 위치의 거리 이름을 표시하지 않는다 일부 지역] (http://stackoverflow.com/questions/33656636/reverse-geocoding-example-doesnt-display-the-street-name-of-a-location-in-some) – geocodezip

+0

관련 질문 : [Google지도 : 국가, 주 /도/지역, 도시가 위도/경도 값을 얻는 방법?] (http : // s tackoverflow.com/questions/4013606/google-maps-how-to-get-country-state-province-region-city-given-a-lat-long-va) – geocodezip

답변

1

처음으로 find() 항목을 읽고 필요한 속성을 읽습니다.

응답에 street_number이없는 경우도 고려해야하며이 스 니펫에서 다루지 않는 경우도 처리해야합니다.

var results = { 
 
    address_components: [{ 
 
    long_name: "704", 
 
    short_name: "704", 
 
    types: [ 
 
     "street_number" 
 
    ] 
 
    }, { 
 
    long_name: "100", 
 
    short_name: "100", 
 
    types: [ 
 
     "attribute_a" 
 
    ] 
 
    }, { 
 
    long_name: "200", 
 
    short_name: "200", 
 
    types: [ 
 
     "attribute_b" 
 
    ] 
 
    }, { 
 
    long_name: "300", 
 
    short_name: "300", 
 
    types: [ 
 
     "attribute_c" 
 
    ] 
 
    }], 
 
    place_id: "8AS8D8F8A881C81DA6S6D8" 
 
} 
 

 
var streetNumber = results.address_components.find(function(item) { 
 
    return item.types.some(function(subitem) { 
 
    return subitem === 'street_number' 
 
    }); 
 
}).long_name; 
 

 
console.log(streetNumber); // 704

+0

적시에 답변 해 주셔서 감사합니다. 묻고 나서 다른 곳에서 답을 찾지 못했지만 당신의 대답이 내 문제를 해결했을 것입니다. 고맙습니다! – Austin

0

는 Array.filter()을 사용하여 수행 할 수있다

results: { 
    address_components [ 
     0: Object: { 
      long_name: "704", 
      short_name: "704", 
      types [ 
       0:"street_number" 
      ] 
     } 
     1: Object {...} 
     2: Object {...} 
     3: Object {...} 
    ] 
    place_id:"8AS8D8F8A881C81DA6S6D8" 
} 


const result = results.address_components.find(item => item.types.indexOf('street_number') > -1) 

const longName = result.long_name // 704 
const shortName = result.short_name // 704