繁体   English   中英

两个javascript数组,使用键查找

[英]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..inObject.keysObject.getOwnPropertyNames来访问它们。

之后,按照他人的建议通过地图访问详细信息

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM