3

我可以创建以下内容并使用

area[0].states[0] 
area[0].cities[0]

var area = [
        {
         "State"   : "Texas",
         "Cities"  : ['Austin','Dallas','San Antonio']
        },
        {
         "State"   :"Arkansas",
         "Cities"  : ['Little Rock','Texarkana','Hot Springs']
        }
       ] ;

我如何重组“区域”,以便如果我知道州名,我可以在引用中使用它来获取城市数组?

谢谢

编辑尝试用我收到的答案来实施(感谢@Eli Courtwright、@17 of 26 和@JasonBunting)我意识到我的问题不完整。我需要在第一次通过索引引用“状态”时遍历“区域”,然后当我选择“状态”时,我需要使用“状态”的值循环回一个结构以获得关联的“城市”。我确实想从上述结构开始(尽管我可以自由地按照自己的方式构建它)并且我不介意类似于@eli 的答案的转换(尽管我无法使该转换正常工作)。第一个问题应该更完整。尝试实现 2 个选择框,其中第一个选择填充第二个...当页面加载时,我将在 js 文件中加载这个数组结构。

4

4 回答 4

2
var area = 
{
    "Texas" : { "Cities"  : ['Austin','Dallas','San Antonio'] },
    "Arkansas" : { "Cities"  : ['Little Rock','Texarkana','Hot Springs'] }
};

然后你可以这样做:

area["Texas"].Cities[0];
于 2008-09-11T20:27:53.730 回答
2

(在答案的帮助下,我得到了我想要的工作。我在下面的代码中修复了所选答案中的语法)

使用以下选择框

<select id="states" size="2"></select>
<select id="cities" size="3"></select>

和这种格式的数据(在 .js 文件中或作为 JSON 接收)

var area = [
    {
     "states"   : "Texas",
     "cities"  : ['Austin','Dallas','San Antonio']
    },
    {
     "states"   :"Arkansas",
     "cities"  : ['Little Rock','Texarkana','Hot Springs']
    }
   ] ;

这些 JQuery 函数将根据州选择框选择填充城市选择框

$(function() {      // create an array to be referenced by state name
 state = [] ;
 for(var i=0; i<area.length; i++) {
  state[area[i].states] = area[i].cities ;
 }
});

$(function() {
 // populate states select box
 var options = '' ;
 for (var i = 0; i < area.length; i++) {
  options += '<option value="' + area[i].states + '">' + area[i].states + '</option>'; 
 }
 $("#states").html(options);   // populate select box with array

 // selecting state (change) will populate cities select box
 $("#states").bind("change",
   function() {
    $("#cities").children().remove() ;      // clear select box
    var options = '' ;
    for (var i = 0; i < state[this.value].length; i++) { 
     options += '<option value="' + state[this.value][i] + '">' + state[this.value][i] + '</option>'; 
    }
    $("#cities").html(options);   // populate select box with array
   }        // bind function end
 );         // bind end 
});
于 2008-09-12T01:02:32.243 回答
1

如果您只想以这种方式创建它,只需说

area = {
    "Texas": ['Austin','Dallas','San Antonio']
}

等等。如果您要问如何获取现有对象并将其转换为此,只需说

states = {}
for(var j=0; j<area.length; j++)
    states[ area[0].State ] = area[0].Cities

运行上面的代码后,你可以说

states["Texas"]

这将返回

['Austin','Dallas','San Antonio']
于 2008-09-11T20:26:52.610 回答
1

这将为您提供基于了解州名的城市数组:

var area = {
   "Texas" : ["Austin","Dallas","San Antonio"], 
   "Arkansas" : ["Little Rock","Texarkana","Hot Springs"]
};

// area["Texas"] would return ["Austin","Dallas","San Antonio"]
于 2008-09-11T20:28:23.247 回答