2017-06-13 62 views
2

我已經從一個GET請求到一個API結束點以下響應:如何JSON對象轉換爲字符串的數組和數量在JavaScript

{ 
    "success": true, 
    "data": { 
    "categories": [ 
     { 
      "id": 1, 
      "label": "Default", 
      "url": "default", 
      "num_of_subs": 0 
     }, 
     { 
      "id": 2, 
      "label": "Pet Grooming", 
      "url": "pet-grooming", 
      "num_of_subs": 2 
     }, 
    ], 
    } 
} 

這裏是取代碼:

const sendRegisterData = fetch('https://sg.cuzzey.com/api/listings/categories', { 
     method: 'GET', 
     headers: { 
      'Accept': 'application/json', 
      'Content-Type': 'application/json', 
     }, 
    }) 
     .then((response) => response.text()) 
     .then((responseText) => { 
      var response_final = JSON.parse(responseText); 
      if (response_final.success) { 
       this.setState({ 
        categories: response_final.data.categories, 
       }) 
      } 
     }) 

我想要做的是從類別中獲取數據並將其作爲字符串和數字(​​id和num_of_subs作爲數字,標籤和url作爲字符串)打印出來。下面是我做的:

const category_options = this.state.categories.map(category => { 
     return [<Text key={category.id} style={styles.smallTextBox}> {category.id} {'\n'}</Text>, 
     <Text key={category.label} style={styles.smallTextBox}> {category.label} {'\n'}</Text>, 
     <Text key={category.num_of_subs} style={styles.smallTextBox}> {category.num_of_subs} {'\n'}</Text>] 
    }) 

<ModalDropdown options={category_options} onSelect={(idx, label) => this.getCategory(idx, label)}> 
       <Text style={styles.smallTextBox}> {this.state.selected_category} </Text> 
</ModalDropdown> 

我用這個代碼以獲取ID,標籤和num_of_subs的價值:

getCategory = (idx, value) => { 
    this.setState({ category_id: value[0], selected_category: value[1], numSubs: value[2] }) 
} 

當我打印出來CATEGORY_ID,selected_category和numSubs,該值是正確的。但是,它們是對象類型而不是字符串/數字。我想操縱這些值,但我不知道如何將它們轉換爲字符串/數字。我已經嘗試過使用String(),Number(),parseInt(),JSON.parse(),toString(),但似乎沒有任何工作,因爲它們都會導致「對象」,當我打印出的typeof值。

我可以問有沒有辦法解決這個問題?

+0

可以提供輸出的一個例子,你想 – Rick

+0

我希望能夠做一些事情,如: '如果(這一點。 state.numSubs> 0){ render_something() 否則{ render_something_else() }' 目前numSubs是不是一個數字,所以我不能用它來與什麼比較。 –

回答

2

您的代碼不工作,因爲您沒有迭代對象數組。你只是簡單地返回數組的對象。這就是爲什麼你不能提取值

var items = [{ 
 
    "success": true, 
 
    "data": { 
 
    "categories": [{ 
 
     "id": 1, 
 
     "label": "Default", 
 
     "url": "default", 
 
     "num_of_subs": 0 
 
     }, 
 
     { 
 
     "id": 2, 
 
     "label": "Pet Grooming", 
 
     "url": "pet-grooming", 
 
     "num_of_subs": 2 
 
     }, 
 
    ], 
 
    } 
 

 
}] 
 

 
setState = []; 
 
var catagories = items.map(x => x.data.categories); 
 
catagories = catagories.reduceRight(x => x.cantact([])); 
 
getCategory = (values) => { 
 
    for (let value of values) { 
 
    setState.push({ 
 
     category_id: value.id, 
 
     selected_category: value.label, 
 
     numSubs: value.num_of_subs 
 
    }) 
 
    } 
 
} 
 

 
var output = getCategory(catagories) 
 
var results = setState.filter(x => x.numSubs > 0) 
 

 
console.log(results);

+0

我可以問這是什麼行'catagories = catagories.reduceRight(x => x.cantact([]));'做?更具體地說,'cantact([])'做什麼? –

+0

@Nguyen Dung它刪除外部數組。如果您發現它有用,您可以選擇答案嗎? – Rick

相關問題