混合了文字和数组的Javascript数组
时间:2020-03-05 18:51:47 来源:igfitidea点击:
我可以创建以下内容并使用
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文件中加载此数组结构。
解决方案
回答
如果我们只想以这种方式创建它,请说
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']
回答
var area = { "Texas" : { "Cities" : ['Austin','Dallas','San Antonio'] }, "Arkansas" : { "Cities" : ['Little Rock','Texarkana','Hot Springs'] } };
然后,我们可以执行以下操作:
area["Texas"].Cities[0];
回答
这将基于知道州的名称为我们提供城市阵列:
var area = { "Texas" : ["Austin","Dallas","San Antonio"], "Arkansas" : ["Little Rock","Texarkana","Hot Springs"] }; // area["Texas"] would return ["Austin","Dallas","San Antonio"]
回答
(在答案的帮助下,我可以按需运行它。我在以下代码中修复了所选答案中的语法)
带有以下选择框
<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 });