Получение ключа JSON от значения или инвертирования данные JSON

Получение единственного ключа от Значения

Я хотел бы сделать назад выбор от следующего 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'};
7
задан Sampson 28 December 2009 в 16:09
поделиться

2 ответа

Нет никакого "автоматического" способа сделать это. Единственный вариант - прокручивать список до тех пор, пока не найдёте значение, соответствующее ключу.

Но, если нужно сделать это несколько раз, то код должен пересобирать 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);
12
ответ дан 6 December 2019 в 14:04
поделиться

Единственным другим логическим решением было бы использование длинного имени в качестве ключа и аббревиатуры в качестве значения в качестве . Выбор, как правило, делается на клавишах, так как они уникальны, как и должно быть.

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

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"}));
3
ответ дан 6 December 2019 в 14:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: