7

从 Value 中获取单个键

我想从以下 JSON 中进行向后选择。我想提取特定州的缩写。在这种情况下,缩写是关键,而我开始使用的值是值。

当然,我可以遍历每个值,将值与我的值进行比较,并在匹配时选择键。这是处理此类事情的最佳方法吗?或者,还有更好的方法?

反转 JSON 数据

另一种选择是在处理的早期反转此数据,以便为自己提供一组相似的值,并交换键/值。我也有兴趣看到有效地做到这一点的方法。

var States = {AL: 'Alabama', AK: 'Alaska', AZ: 'Arizona', AR: 'Arkansas', 
              CA: 'California', CO: 'Colorado', CT: 'Connecticut', 
              DE: 'Delaware', DC: 'District of Columbia', FL: 'Florida', 
              GA: 'Georgia', HI: 'Hawaii', ID: 'Idaho', IL: 'Illinois', 
              IN: 'Indiana', IA: 'Iowa', KS: 'Kansas', KY: 'Kentucky', 
              LA: 'Louisiana', ME: 'Maine', MD: 'Maryland', MA: 'Massachusetts', 
              MI: 'Michigan', MN: 'Minnesota', MO: 'Missouri', MT: 'Montana', 
              NE: 'Nebraska', NV: 'Nevada', NH: 'New Hampshire', 
              NJ: 'New Jersey', NM: 'New Mexico', NY: 'New York', 
              NC: 'North Carolina', ND: 'North Dakota', OH: 'Ohio', 
              OK: 'Oklahoma', OR: 'Oregon', PA: 'Pennsylvania', 
              RI: 'Rhode Island', SC: 'South Carolina', 
              SD: 'South Dakota', TN: 'Tennessee', TX: 'Texas', UT: 'Utah', 
              VT: 'Vermont', VA: 'Virginia', WA: 'Washington', 
              WV: 'West Virginia', WI: 'Wisconsin', WY: 'Wyoming'};
4

2 回答 2

13

没有“自动”的方法可以做到这一点。您唯一的选择是遍历列表,直到找到与键匹配的值。

但是,如果您需要多次执行此操作,您应该让代码重建 JSON 对象并交换键/值,以便将来的查找更快。一个简单的方法:

function swapJsonKeyValues(input) {
    var one, output = {};
    for (one in input) {
        if (input.hasOwnProperty(one)) {
            output[input[one]] = one;
        }
    }
    return output;
}

var stateAbbrs = swapJsonKeyValues(States);
于 2009-12-28T16:15:02.820 回答
3

唯一的其他合乎逻辑的解决方案是将长名称作为,将缩写作为。通常在键上进行选择,因为它们应该是唯一的。

通过第一次进行键值切换,您可以避免每次想要获取值时进行迭代。

function switcharoo(o) {
    var t = {};
    for (var i in o) {
        if(o.hasOwnProperty(i)){
            t[o[i]] = i ;
        }
    }
    return t;
}

console.log(switcharoo({AZ: "Arizona"}));
于 2009-12-28T16:14:37.753 回答