Javascript 从值获取JSON键或反转JSON数据 从值中获取单个键
我想从下面的JSON中做一个反向选择。我想提取一个特定州的缩写。在这种情况下,缩写是关键,我从值开始 当然,我可以循环遍历每个值,将值与我的值进行比较,并在匹配时选择键。这是处理类似问题的最佳方式吗?还是有更好的办法 反转JSON数据 另一个选择是在处理的早期反转这些数据,给自己一组类似的值,并交换键/值。我也很想看看有效地做到这一点的方法Javascript 从值获取JSON键或反转JSON数据 从值中获取单个键,javascript,json,lookup,Javascript,Json,Lookup,我想从下面的JSON中做一个反向选择。我想提取一个特定州的缩写。在这种情况下,缩写是关键,我从值开始 当然,我可以循环遍历每个值,将值与我的值进行比较,并在匹配时选择键。这是处理类似问题的最佳方式吗?还是有更好的办法 反转JSON数据 另一个选择是在处理的早期反转这些数据,给自己一组类似的值,并交换键/值。我也很想看看有效地做到这一点的方法 var States = {AL: 'Alabama', AK: 'Alaska', AZ: 'Arizona', AR: 'Arkansas',
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'};
唯一的其他逻辑解决方案是长名称为键,缩写为值。选择通常是在关键点上进行的,因为它们应该是唯一的 通过第一次切换键值,您可以避免每次想要获取值时都进行迭代
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"}));
没有“自动”的方法可以做到这一点。您唯一的选择是在列表中循环,直到找到与键匹配的值
但是,如果需要多次执行此操作,则应该让代码使用交换的键/值重新生成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);
据我所知,这是唯一的办法。即使您使用一些库,我相信它也会在幕后实现…@Luca:Nope,
one
在函数顶部的var
语句中声明。但在您评论它丢失之前,它就在那里:)