javascript - JSON 使用命名索引访问数组对象

标签 javascript jquery json

假设我有这个 HTML

<form action="#" action="get">

    <select name="college" id="college" onchange="selection('college', 'course')">
        <option value="">Select an Option</option>
        <option value="amity">Amity University</option>
        <option value="indraprastha">Indraprasth University</option>
    </select>

    <br>
    <select name="course" id="course" onchange="selection('course', 'stream')" >
        <option value="">Select an Option</option>
    </select>

    <br>
    <select name="stream" id="stream">
        <option value="">Select an Option</option>
    </select>

</form>

我有这个 JSON,

{
  "amity":{
    "course":[
      {
        "name":"B.Tech",
        "value":"btech",
        "stream":[
          {
            "name":"Computer Science",
            "value":"cse"
          },
          {
            "name":"Information Technology",
            "value":"cse"
          },
          {
            "name":"Aerospace Engg.",
            "value":"cse"
          }
        ]
      },
      {
        "name":"M.Tech",
        "value":"mtech",
        "stream":[
          {
            "name":"Networking",
            "value":"net"
          },
          {
            "name":"telecommunications",
            "value":"tc"
          }
        ]
      }
    ]
  }
}

Javascript 是,

function selection(s1, s2) {
    var first = document.getElementById(s1),
        second = document.getElementById(s2);

    var college = $('#college').val(),              
        cr = $('#course').val(),
        st = $('#stream').val(),
        se = $('#sem').val();

    $.getJSON("json/select.json", function(data) {

    switch(s1) {        
        case 'college':
            $.each(data[college].course, function(key, value) {
                second.innerHTML += '<option value="'+ value.value +'">'+ value.name +'</option>';
            }); break;

        case 'course':
            $.each(data[college].course[].stream, function(key, value) {
                second.innerHTML += '<option value="'+ value.value +'">'+ value.name +'</option>';
            }); break;  
    }
});
}

我正在制作一个动态下拉菜单,其中下一个下拉值是使用先前值的引用从 JSON 对象文件中获取的。正如我的这个问题( link )所建议的,我可以使用对象中的类(class)数组获取类(class)值(第二个下拉列表)。

现在,由于第二个选择菜单(类(class))中的值是动态填充的,我无法弄清楚如何采用相应的类(class)数组元素来填充流数组的下一个选择菜单选项。

由于 JSON 中的 course 属性是一个数组,因此我不知道从第二个菜单中选择哪个索引元素元素(请参阅“course”的 switch case,data[college].course[] 索引为空)。硬编码的 [0] 可以工作,但那不是动态的。

如何使用从第二个菜单中获取的值来访问stream数组。

我希望我说得清楚。提前致谢!

最佳答案

只需迭代类(class)数组即可动态获取流:

for (var i = 0; i < data[college].course.length; i++) { 
    currentStream = data[college].course[i].stream; 
}

即使用您的代码:

for (var i = 0; i < data[college].course.length; i++) {
    $.each(data[college].course[i].stream, function(key, value) {
        second.innerHTML += '<option value="'+ value.value +'">'+ value.name +'</option>';
    });
}
<小时/>

查找您所选类(class)的当前流:

// assuming cr = "btech"
for (var i = 0; i < data[college].course.length; i++) {
    if (data[college].course[i].value == cr) {
        currentStream = data[college].course[i].stream;
        break;
    }
}

$.each(currentStream, function(key, value) {
    second.innerHTML += '<option value="'+ value.value +'">'+ value.name +'</option>';
});

关于javascript - JSON 使用命名索引访问数组对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40028176/

相关文章:

javascript - Zapier 自定义响应对象

java - 使用 Jackson 以自定义顺序序列化对象属性

javascript - 使用javascript加载页面后将外部CSS应用于动态html

javascript - 识别鼠标点击 Flash 元素

javascript - 如何在本地保存羊驼json文件

javascript - 在 Javascript 中重定向到之前的 ROUTE

jquery - HTML5 地理定位实现

ruby - 如何更改默认的 gem 版本

javascript - 将新节点添加到所需的文件夹

javascript - 验证密码字段是否为空