2016-04-04 45 views
0

如何返回基於兩個條件一組新的使用map數組返回一組新的數組:使用地圖方法

  • 數組的長度不應該是0
  • 作用應該是主持人

這是我最初的反應看起來像

enter image description here

作出反應函數映射響應

_getList(memberships) { 
    const items = memberships.map((membership) => { 
     return (
      <RadioButton 
       value={membership.forum.slug} 
       label={membership.forum.title} /> 
     ); 
    }); 

    return(
     <RadioButtonGroup> 
      {items} 
     </RadioButtonGroup> 
    ); 
} 

在我的渲染功能,我檢查,如果長度不爲0

const renderedList = this._getList(UserStore.getState().memberships.length !== 0); 

我應該如何添加其他檢查新數組返回的值應該只包含數據與role === moderator

+0

哪個數組的長度不應該是零? – void

+0

成員資格對象的長度。我編輯了我的問題,並忘記添加'.length',現在已經更正。 – zaq

回答

1

使用過濾器

_getList(memberships) { 
    const items = (memberships.filter(membership => membership.role === 'moderator') || []).map((membership) => { 
     return (
      <RadioButton 
       value={membership.forum.slug} 
       label={membership.forum.title} /> 
     ); 
    }); 

    if(items.length === 0) return null; 

    return(
     <RadioButtonGroup> 
      {items} 
     </RadioButtonGroup> 
    ); 
} 

,那麼你可以這樣做:

const renderedList = this._getList(UserStore.getState().memberships); 

if(renderedList) { 
    this.renderSomething(); 
} else { 
    this.renderSomethingElse(); 
} 
+0

謝謝。兩個答案都很好 – zaq

2

你想看看Array API的.filter方法。

const items = memberships 
    .filter(item => item.role === 'moderator') 
    .map((membership) => { 
     return (
      <RadioButton 
       value={membership.forum.slug} 
       label={membership.forum.title} /> 
     ); 
    }) 

.filter將迭代通過陣列的所有元件和與該傳遞通過所提供的功能來實現的測試的所有元素返回一個新的數組。如果memberships數組爲空,它將簡單地返回一個空數組。我們假設memberships屬性總是一個數組。無論是數組中的值,還是一個空數組([])。如果memberships屬性可能丟失,您仍然需要添加支票,例如您的renderedList

+0

謝謝。 'memberships'屬性可以是一個空數組或者包含數據,所以我不必擔心另一個檢查。 – zaq