在反应中循环一个对象?

Posted

技术标签:

【中文标题】在反应中循环一个对象?【英文标题】:Loop an object in react? 【发布时间】:2018-01-18 06:27:24 【问题描述】:

数据:

我有内部数组的数据,我尝试使用默认代码循环:

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

我想先显示该数组的名称,(这是日期)然后显示该数组的组成,但我得到错误:

joblist.map 不是函数

【问题讨论】:

joblist 是您在屏幕截图中显示的对象吗? 公平地说,控制台有你的答案。如您所见,joblist 是一个对象,其中键是日期而不是数组。 正如@GillesC 已经说过的:它不是一个数组,它是一个对象。 joblist 不是一个数组,而是一个对象。您需要先将其转换为数组。 我对此进行了修改,现在我看到了所有键 Object.keys(joblist).map((key) =&gt; ( &lt;div&gt;key&lt;/div&gt; )) 但接下来如何显示数组? 【参考方案1】:

我们不能直接在对象上使用mapfilter,首先我们需要从该对象中获取一个数组(属性或属性值),然后只有我们可以。


你得到的数据不是一个数组,所以我们不能直接使用Array.prototype.map。您需要做的是首先使用Object.keys 获取数组中的所有键。获得数组后,在其上使用 map,在 map 函数体内使用另一个 map 来迭代值。

您也可以使用Object.values 或Object.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);
   )
)

【讨论】:

id未定义,认为需要添加id 哦抱歉应该是key=el.id 而不是id,更新了答案。【参考方案2】:

如您所见,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>

【讨论】:

以上是关于在反应中循环一个对象?的主要内容,如果未能解决你的问题,请参考以下文章

在反应中管理循环单选按钮的状态

如何在循环中推送对象数组中的值?

如何在反应原生渲染中以无限循环返回数组项视图?

在函数调用上反应无限循环

反应中的简单for循环此代码在for循环中给出错误

循环 json 对象并用 React 显示数据?