2017-08-10 48 views
2

數據:循環中的對象?

enter image description here

我有有內部數組中的數據,我嘗試循環默認代碼:

<div className="loop-container"> 
    { 
     joblist.map((itemb,index) => (
      <div> 
      </div> 
     )) 
    } 
</div> 

我想表明的名字,數組第一個,(這是日期),然後展示一下這個陣列由,但我得到的錯誤:

joblist.map is not a function

+0

「joblist」是您在屏幕截圖中顯示的**對象**嗎? –

+3

公平地說,控制檯有你的答案。你可以清楚地看到'joblist'是一個對象,其中的鍵是日期而不是數組。 – GillesC

+0

所以@GillesC已經說過:它不是一個數組,它是一個對象。 –

回答

4

直接,我們不能使用mapfilter關於對象,首先我們需要從那個對象獲得一個數組(屬性或屬性值),然後我們只能得到這個數組。


您得到的數據不是數組,因此我們直接不能使用Array.prototype.map。你需要做的是首先使用Object.keys來獲得數組中的所有密鑰。一旦你得到這個數組,使用map就可以了,在map函數體內使用另一個map來迭代這些值。

您也可以使用Object.valuesObject.entries,但模式將不會與Object.keys()相同。

寫這樣的:

<div className="loop-container"> 
    { 
     Object.entries(joblist).map(([key, value]) => (
      <div id={key}> 
       Date: {key} 
       { 
        value.map(el => <div key={el.id}> {el.created_time} </div>) 
       } 
      </div> 
     )) 
    } 
</div> 

檢查這個片段使用Object.entries

let obj = { 
 
    'key1': [{a:1}, {a:2}, {a:3}], 
 
    'key2': [{a:4}, {a:5}, {a:6}], 
 
    'key3': [{a:7}, {a:8}, {a:9}] 
 
}; 
 

 
Object.entries(obj).map(([key, value]) => { 
 

 
    console.log('key name = ', key); 
 

 
    value.map(el => { 
 
     console.log(el.a); 
 
    }) 
 
})

檢查這個片段使用Object.keys

let obj = { 
 
    'key1': [{a:1}, {a:2}, {a:3}], 
 
    'key2': [{a:4}, {a:5}, {a:6}], 
 
    'key3': [{a:7}, {a:8}, {a:9}] 
 
}; 
 

 
Object.keys(obj).map(key => { 
 

 
    console.log('key name = ', key); 
 

 
    obj[key].map(el => { 
 
     console.log(el.a); 
 
    }) 
 
})

檢查這個片段使用Object.values

let obj = { 
 
    'key1': [{a:1}, {a:2}, {a:3}], 
 
    'key2': [{a:4}, {a:5}, {a:6}], 
 
    'key3': [{a:7}, {a:8}, {a:9}] 
 
}; 
 

 
Object.values(obj).map(value => { 
 

 
    console.log('value = ', JSON.stringify(value)); 
 
    
 
    value.map(el => { 
 
     console.log(el.a); 
 
    }) 
 
})

+0

id未定義,認爲需要add id –

+0

對不起,應該是'key = {el.id}'而不是'{id}',更新了答案。 –

1

正如你看到的joblist不是陣列,它是對象。如果你真的想使用map那麼你可以使用new Map()new Map()構造函數接受可迭代的條目。使用Object.entries,您可以很容易地將Object轉換爲Map:

var mapjoblist = new Map(Object.entries(joblist)); 

<div className="loop-container"> 
    {mapjoblist.map((itemb,index) => (
     <div> 
     ....... 

     </div> 

    ))} 
</div>