Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 如果存在多个值,如何循环处理json项?_Jquery_Json - Fatal编程技术网

Jquery 如果存在多个值,如何循环处理json项?

Jquery 如果存在多个值,如何循环处理json项?,jquery,json,Jquery,Json,我想用来自json提要的数据提交填充一个选择框。我的函数读取json,并循环遍历其值 我得到的结果不是我所期望的,在循环中有些东西是错误的 我的json: "case": { "1": { "id": "47", "name": "Stahl", "n": 239 }, "2": { "id": "111", "name": "Titan", "n": 16

我想用来自json提要的数据提交填充一个选择框。我的函数读取json,并循环遍历其值

我得到的结果不是我所期望的,在循环中有些东西是错误的

我的json:

   "case": {
      "1": {
        "id": "47",
        "name": "Stahl",
        "n": 239
      },
      "2": {
        "id": "111",
        "name": "Titan",
        "n": 16
      }
    },
我的职能:

  if (obj.facetes.case  ){
    $('#case_m').selectmenu( "enable" );
    $.each(obj.facetes.case, function(key,valueObj){
          Object.keys(valueObj || {}).forEach(function(k) {
          $('#case_m').append(
            $('<option></option>').val(valueObj['id']).html(valueObj['name'] + ' ('+valueObj['n']+')')
          );
       })
     })
  }
  else{
    $('#case_m').selectmenu( "disable" );
  }
结果是:

<select name="case_m" id="case_m" data-mini="true" class="filter_watch">
    <option>Material Gehäuse auswählen</option>
    <option value="47">Stahl (239)</option>
    <option value="47">Stahl (239)</option>
    <option value="47">Stahl (239)</option>
    <option value="111">Titan (16)</option>
    <option value="111">Titan (16)</option>
    <option value="111">Titan (16)</option>
</select>

这些值是它们的三倍,与每个项目的元素数量相同。如何更改函数以获得唯一的结果?

该问题是由于通过Object.keys的内部循环造成的,您实际上不需要它。您可以直接从valueObj访问属性,例如valueObj.name

也就是说,您可以进一步使用map构建HTML字符串数组来填充select,使代码更加简洁,如下所示:

var obj={ 面:{ 案例:{ 1:{id:47,姓名:斯塔尔,n:239}, 2:{id:111,姓名:Titan,n:16} } } } 如果是obj.FACETS.case{ //$'case\m'。选择菜单可使用; var options=Object.keysobj.facetes.case.mapfunctionk{ var item=对象刻面大小写[k]; 返回`${item.name}${item.n}`; }; $‘case_m’。附加选项; }否则{ //$'case\u m'。选择菜单可编辑; } 材料的使用
正如Rory所提到的,这个问题是由于通过Object.keys的内部循环造成的,而您实际上并不需要它。我写了一个稍微不同的逻辑

var obj={}; obj.facetes={}; obj.facetes={大小写:{ 1: { 身份证号码:47, 姓名:斯塔尔, n:239 }, 2: { id:111, 名称:泰坦, n:16 } } } 如果是obj.FACETS.case{ $.eachobj.facetes.case,functionkey,值{ $‘case\m’ .附加$ .attrvalue,值['id'] .textvalue['name']+''+值['n']+; }; } 否则{ $'case_m'。选择菜单禁用; }