2015-07-02 3 views
0

У меня есть две структуры данных (они намного больше, это только отрывки)Два JavaScript массивы, используя ключ, чтобы посмотреть

var data = [ 
    {count: 6, zip: "78705"}, 
    {count: 4, zip: "78754"}, 
    {count: 33, zip: "78757"} 
] 

var txcodes = [ 
    {county: "SWISHER", code: "437"}, 
    {county: "TARRANT", code: "439"}, 
    {county: "TAYLOR", code: "441"}, 
    {county: "TRAVIS", code: "453"} 
] 

Я написал код, который успешно проходит через «данные» и принимает zipcode и получает соответствующее графство (с внешнего веб-сайта через HTTP-запрос). Она возвращает структуру, которая выглядит как

results = { 
    TRAVIS: 8, 
    TAYLOR: 1 
} 

(8 и 1 являются примерами счетчиков для сколько раз почтового индекса от данных происходит ... в основном текущий счет).

Что мне нужно сделать дальше, это использовать ключи от результатов, чтобы узнать, что такое соответствующий код в txcodes. Как мне это сделать?

var currentCounty = str.result[0].County 

возвращает графство из результатов.

console.log(txcodes[i].county + " " + txcodes[i].code) 

печатает код округа & от txcodes.

Я немного смущен о том, как это сделать. Это похоже на относительно простую концепцию, но я не могу получить желаемый результат. Может ли кто-нибудь указать мне в правильном направлении?

+0

я не уверен, что это совершенно ясно, что вы просите ... – sfletche

+0

Мы также спутать ваш вопрос. Пожалуйста, постарайтесь более подробно рассказать о своей проблеме. –

+0

Вы спрашиваете, как получить ключи от «результатов»? – Barmar

ответ

0

Построить поисковую карту, как это:

var lookupMap = {}; 

for (var i = 0; i < txcodes.length; i++) { 
    var element = txcodes[i]; 
    lookupMap[element.county] = element; 
} 

Тогда вы можете просто сделать это, чтобы напечатать нужный результат:

console.log(lookupMap[currentCounty].county + " " + lookupMap[currentCounty].code); 
0

Так что вы получите обратно из вашего запроса HTTP является простой задачей , и вам нужно получить доступ к его именам свойств. Вы можете сделать это легко с Object.keys:

resultKeys = Object.keys(result); 

Это даст вам массив свойств объекта:

[ "TRAVIS", "TAYLOR" ] 

Вы можете легко перебирать над этим массивом сейчас, и внутри вы спросите свой объект результата для его значение:

for (var i = 0; i < resultKeys.length; i++) { 
    console.log(resultkeys[i] + ": " + result[resultkeys[i]]); 
} 

Используя эту технику, вы можете использовать, например, underscore.js libary легко отфильтровать нужные данные:

for (var i = 0; i < resultKeys.length; i++) { 
    console.log(_.filter(txcodes , function(key){ return txcodes.county== resultkeys[i]; })); 
} 
+1

это не помогает OP найти конкретный код для заданного ключа. – Alnitak

+0

, если вы рекомендуете подчеркнуть, тогда вы должны прочитать руководство подчёркивания! - в этом случае '_.findWhere (txcodes, {county: currentCounty})' будет подходящим методом. – Alnitak

1

Если имена графств являются уникальными и, если вы собираетесь делать повторную Lookups, вы должны построить «карту» коды из массива:

var txcodesByCounty = txcodes.reduce(function(p, c) { 
    p[c.county] = c.code; 
    return p; 
}, {}); 

Вы можете затем просматривайте коды непосредственно с этой карты.

0

Если округ в вашем результате доступен только в качестве ключа, вам необходимо for..in, Object.keys или Object.getOwnPropertyNames, чтобы получить доступ к ним.

После, получить доступ к деталям с помощью карты, как другие предложили

var county, found = []; 
for (county in results) 
    found.push(map[county]);