2017-08-17 68 views
3

我試圖訪問下拉菜單 的所有品牌和值,但我不能用這種方式。如何訪問JSON使用jquery嵌套數組

<select id="secim"> 
</select> 

var data = [ 
     { 
      "products": "Cars", 
      "brands_values" : [ 
      {"brand":"fiat","value":1}, 
      {"brand":"bmw","value":2} 
      ] 
     } 
     ]; 

$.each(data, function(i, item) { 
     $('#secim').append($('<option>', { 
      value: item.brands_values.value, 
      text: item.brands_values.brand 
     })); 
     }); 

我該怎麼辦?謝謝

+2

這裏這個問題是'brands_values'是一個多值的數組。您需要使用'$ .each'循環遍歷'brands_values'中的元素。 – Lix

回答

2

只需添加另一個循環的品牌:

var data = [ 
 
    { 
 
    "products": "Cars", 
 
    "brands_values" : [ 
 
     {"brand":"fiat","value":1}, 
 
     {"brand":"bmw","value":2} 
 
    ] 
 
}]; 
 

 
$.each(data, function(i, item) { 
 
    if (item.brands_values) { 
 
     item.brands_values.forEach(brands => { 
 
     $('#secim').append($('<option>', { 
 
      value: brands.value, 
 
      text: brands.brand 
 
     })); 
 
     }); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<select id="secim"> 
 
</select>

注意:您可能希望在這種情況下,使用本機.forEach,因爲它是足夠。我過去有性能問題jQuery.each()所以我儘量避免它,每當我可以(check this):

data.forEach(item => { 
    if (item.brands_values) { 
     item.brands_values.forEach(brands => { 
      $('#secim').append($('<option>', { 
       value: brands.value, 
       text: brands.brand 
      })); 
     }); 
    } 
}); 
+0

工程,但爲什麼兩個循環? –

+0

非常感謝你這個人在工作 – ucnumara

+0

@ucnumara樂於幫助! – DontVoteMeDown

0

重複品牌價值而不僅僅是數據。以便您可以訪問每個品牌和價值。

var data = [ 
 
     { 
 
      "products": "Cars", 
 
      "brands_values" : [ 
 
      {"brand":"fiat","value":1}, 
 
      {"brand":"bmw","value":2} 
 
      ] 
 
     } 
 
     ]; 
 

 
    
 
    $.each(data[0].brands_values, function(i, item) { 
 
     $('#secim').append($('<option>', { 
 
       value: item.value, 
 
       text: item.brand 
 
      })); 
 
      });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<select id="secim"> 
 
</select>

+0

謝謝你,但不工作 – ucnumara

+0

@ucnumara應該工作現在檢查 –

+0

國際海事組織這是一個很好的做法,檢查'brands_values'值,它可能爲空。另外,如果'data.length> 0'因爲你正在對它進行硬編碼,它就是索引。 – DontVoteMeDown

1
$.each(data, function(i, item) { 
    $.each(item.brands_values, function(j, brand){ 
    $('#secim').append($('<option>', { 
     value: brand.value, 
     text: brand.brand 
    })); 
    }); 
}); 

你需要另一個循環 - 當然第一個「循環」是不是很優雅,但是這是由於給定的數據格式。

工作小提琴:https://jsfiddle.net/3pL6n6pj/

+0

謝謝你,這人也在工作 – ucnumara

0

首先通過使用#reduce()功能從data創建brand_values列表。然後將其作爲items傳遞給您的$.each

見下面的演示:

var data = [{ 
 
    "products": "Cars", 
 
    "brands_values": [{ 
 
     "brand": "fiat", 
 
     "value": 1 
 
    }, 
 
    { 
 
     "brand": "bmw", 
 
     "value": 2 
 
    } 
 
    ] 
 
}]; 
 

 
var items = data.reduce(function(p,c){ 
 
    c.brands_values.forEach(function(e){ 
 
    p.push(e); 
 
    }); 
 
    return p; 
 
},[]); 
 

 
$.each(items, function(i,item) { 
 
    $('#secim').append($('<option>', { 
 
    value: item.value, 
 
    text: item.brand 
 
    })); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<select id="secim"></select>

+0

@ucnumara你對這個問題的看法?謝謝! – kukkuz