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 に答える