2016-07-11 11 views
0

Mit Google Maps API möchte ich den Wert eines Schlüssels innerhalb eines Objekts anhand des Werts innerhalb eines Arrays innerhalb desselben Objekts finden können. Als ich „Inspect Element“ auf meiner Seite, um die Konsole zu sehen, bitte hier ist, was es in Bezug auf die Objektstruktur zeigt:Verwenden Sie den Array-Wert, um den Schlüsselwert des übergeordneten Objekts zu finden

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

Ich möchte in der Lage zu finden „street_number“ in dem Objekt, so kann ich finde den entsprechenden Wert von "704", der sich ebenfalls im Objekt befindet.

Der schwierige Teil ist, dass die Werte in "address_compenents" nicht immer in der gleichen Reihenfolge sind, so kann ich nicht einfach results[0].address_components[0].long_name in meinem Javascript schreiben, um es zu finden. Ich bin in diesem Projekt auf Javascript beschränkt, so dass alle Antworten in dieser Sprache sehr geschätzt werden. Vielen Dank im Voraus!

Hinweis: Ich bin nicht gegen die Verwendung von Bibliotheken wie lodash oder Unterstrich, wenn es hilft, das Problem zu lösen.

+0

damit verbundene Frage: [Reverse-Geocoding Beispiel zeigt nicht die Straßennamen eines Standorts in einige Regionen] (http://stackoverflow.com/questions/33656636/reverse-geocoding-example-doesnt-display-the-street-name-of-a-location-in-some) – geocodezip

+0

Verwandte Frage: [Google Maps: Wie bekomme ich Land, Staat/Provinz/Region, Stadt mit einem lat/long Wert?] (http: // s tackoverflow.com/questions/4013606/google-maps-how-to-get-country-state-province-region-city-given-a-lat-long-va) – geocodezip

Antwort

1

Zuerst find() das Element, dann lesen Sie das erforderliche Attribut.

Beachten Sie, dass Sie auch über den Fall nachdenken sollten, in dem in der Antwort kein street_number vorhanden ist, was nicht in diesem Code enthalten ist.

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

Vielen Dank für eine rechtzeitige Antwort! Ich stolperte zufällig an einer Antwort woanders nach der Frage, aber Ihre Antwort hätte auch mein Problem gelöst. Vielen Dank! – Austin

0

ist es möglich, es zu tun, indem Sie 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 
Verwandte Themen