[英]Two javascript arrays, using a key to look up
我有两个数据结构(它们更长,这些只是摘录)
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"}
]
我编写的代码成功地通过了“数据”并获取了邮政编码,并检索了相应的县(通过HTTP请求从外部网站获取)。 它返回一个看起来像
results = {
TRAVIS: 8,
TAYLOR: 1
}
(8和1是计数器的示例,这些计数器显示数据中的邮政编码发生了多少次…基本上是运行计数)。
接下来,我需要使用结果中的键来查找txcodes中相应的代码。 我该怎么做呢?
var currentCounty = str.result[0].County
从结果返回县。
console.log(txcodes[i].county + " " + txcodes[i].code)
从txcodes打印县和代码。
我对如何执行此操作有些困惑。 这似乎是一个相对简单的概念,但我似乎无法获得理想的结果。 有人可以指出正确的方向吗?
如果县名是唯一的, 并且要进行重复查找,则应在数组之外建立代码的“映射”:
var txcodesByCounty = txcodes.reduce(function(p, c) {
p[c.county] = c.code;
return p;
}, {});
然后,您可以直接从此地图中查找代码。
建立一个像这样的查找图:
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);
因此,从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库轻松地过滤所需的数据:
for (var i = 0; i < resultKeys.length; i++) {
console.log(_.filter(txcodes , function(key){ return txcodes.county== resultkeys[i]; }));
}
如果结果中的县仅可用作键 ,则需要for..in
, Object.keys
或Object.getOwnPropertyNames
来访问它们。
之后,按照他人的建议通过地图访问详细信息
var county, found = [];
for (county in results)
found.push(map[county]);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.