原文链接:https://bobbyhadz.com/blog/react-loop-through-object

作者:Borislav Hadzhiev

正文从这开始~

遍历对象的键

在React中循环遍历对象:

  1. 使用Object.keys() 方法得到对象的键组成的数组。
  2. 使用map()方法来迭代键组成的数组。
export default function App() {
const employee = {
id: 1,
name: 'Bob',
salary: 123,
}; return (
<div>
{/* ️ iterate object KEYS */}
{Object.keys(employee).map((key, index) => {
return (
<div key={index}>
<h2>
{key}: {employee[key]}
</h2> <hr />
</div>
);
})} <br />
<br />
<br /> {/* ️ iterate object VALUES */}
{Object.values(employee).map((value, index) => {
return (
<div key={index}>
<h2>{value}</h2> <hr />
</div>
);
})}
</div>
);
}

我们使用Object.keys方法得到对象的键组成的数组。

const employee = {
id: 1,
name: 'Bob',
salary: 123,
}; // ️ ['id', 'name', 'salary']
console.log(Object.keys(employee)); // ️ [1, 'Bob', 123]
console.log(Object.values(employee));

我们只可以在数组上调用map()方法。所以我们需要得到对象的键组成的数组,或者值组成的数组。

我们传递给Array.map方法的函数被调用,其中包含数组中的每个元素和当前迭代的索引。在上面的例子中,我们使用index作为元素上的key属性,如果可以的话,更好的方式是使用更加稳定的、独一无二的标识符。

当遍历对象的键时,使用对象的键作为key属性是安全可靠的,因为对象中的键保证是唯一的。

export default function App() {
const employee = {
id: 1,
name: 'Bob',
salary: 123,
}; return (
<div>
{/* ️ iterate object KEYS */}
{Object.keys(employee).map(key => {
return (
<div key={key}>
<h2>
{key}: {employee[key]}
</h2> <hr />
</div>
);
})}
</div>
);
}

然而,如果遍历对象的值,那么使用对象的值作为key属性是不安全的,除非你可以确保所有的值在对象中都是独一无二的。

由于性能的原因,React需要在内部使用key属性。这有助于库确保只重新渲染已经改变的数组元素。说到这里,你不会看到使用索引和一个稳定的、唯一的标识符之间有任何明显的区别,除非你要处理成千上万的数组元素。

遍历对象的值

在React中,循环遍历对象的值:

  1. 使用Object.values() 方法得到对象的值组成的数组。
  2. 使用map()方法迭代对象值组成的数组。
export default function App() {
const employee = {
id: 1,
name: 'Bob',
salary: 123,
}; return (
<div>
{/* ️ iterate object VALUES */}
{Object.values(employee).map((value, index) => {
return (
<div key={index}>
<h2>{value}</h2> <hr />
</div>
);
})}
</div>
);
}

Object.values

我们使用Object.values 方法得到对象的值组成的数组。

const employee = {
id: 1,
name: 'Bob',
salary: 123,
}; // ️ [1, 'Bob', 123]
console.log(Object.values(employee));

如果你只想渲染对象的值,你可以使用此方法直接访问它们。

Object.entries

你也可以使用Object.entries 方法来返回对象的键值对数组。

export default function App() {
const employee = {
id: 1,
name: 'Bob',
salary: 123,
}; console.log(Object.entries(employee)); return (
<div>
{Object.entries(employee).map(([key, value]) => {
return (
<div key={key}>
<h2>
{key}: {employee[key]}
</h2> <hr />
</div>
);
})}
</div>
);
}

下面是Object.entries()方法的输出。

const employee = {
id: 1,
name: 'Bob',
salary: 123,
}; // ️ [
// ['id', 1],
// ['name', 'Bob'],
// ['salary', 123],
// ]
const result = Object.entries(employee);
console.log(result);

该方法返回一个包含键值对子数组的数组。

Array.forEach()

另一种方法是使用Array.forEach()方法来迭代对象的键,并将JSX元素推送到一个数组中,然后我们进行渲染。

export default function App() {
const employee = {
id: 1,
name: 'Bob',
salary: 123,
}; const results = []; Object.keys(employee).forEach(key => {
results.push(
<h2 key={key}>
{key}: {employee[key]}
</h2>,
);
}); return (
<div>
{results}
</div>
);
}

Array.forEach()方法在每个键上都会被调用,然而forEach()方法返回undefined,所以我们不能直接在JSX代码中使用它。相反,我们把JSX元素推到一个数组中,然后再进行渲染。

需要注意的是,这是一个比较间接的方法,你不会在React应用程序中经常看到它的使用。

React技巧之循环遍历对象的更多相关文章

  1. for/in 循环遍历对象的属性

    for/in 语句循环遍历对象的属性. js中获取key得到某对象中相对应的value的方法:obj.key js中根据动态key得到某对象中相对应的value的方法有二: 一.var key = & ...

  2. JS完成页面跳转并传参的方法|附加:循环遍历对象

    此方法只能传递较少参数 方法如下: <a href='page/index.html'>跳转</a> 以上是正常写法,如果要传参按一下写法: <!--参数写在?后面,多个 ...

  3. cocos2d JS-(JavaScript) 几种循环遍历对象的比较

    通常我们会用循环的方式来遍历数组.但是循环是 导致js 性能问题的原因之一.一般我们会采用下几种方式来进行数组的遍历: 方式1: for in 循环: var arr = [1,2,3,4,5]; v ...

  4. javaScript for in循环遍历对象

    for循环常被我们用来遍历数组,而如何遍历对象呢? 这时就需要用到for in循环了 写一个遍历对象名简写如下: for(var xxx in ooo){console.log(xxx)} 其中xxx ...

  5. cocos2d JS-(JavaScript) cc.each循环遍历对象

    有了它,妈妈再也不用担心我的数组会越界啦!! each()方法能使DOM循环结构简洁,不容易出错.each()函数封装了十分强大的遍历功能,使用也很方便,它可以遍历一维数组.多维数组.DOM, JSO ...

  6. js for in循环遍历对象,获取key:value值

    var testObj = { 'a':'111', 'b':'222', 'c':'333', 'd':'444'}for(var i in testObj){ console.log(i); // ...

  7. Java循环遍历中直接修改遍历对象

    Java 循环遍历中直接修改遍历对象如下,会报异常: for (ShopBaseInfo sp: sourceList) { if(sp.getId()==5){ sourceList.remove( ...

  8. 如何循环遍历document.querySelectorAll()方法返回的结果

    使用JavaScript的forEach方法,我们可以轻松的循环一个数组,但如果你认为document.querySelectorAll()方法返回的应该是个数组,而使用forEach循环它: /* ...

  9. es6五种遍历对象属性的方法 - 表格整理

    ES6 一共有5种方法可以遍历对象的属性. (1)for...in for...in循环遍历对象自身的和继承的可枚举属性(不含 Symbol 属性). (2)Object.keys(obj) Obje ...

随机推荐

  1. Go xmas2020 学习笔记 09、Closures

    09-Closures.闭包是一种函数,调用具有来自函数外部的附加数据.闭包内的额外数据是引用封闭的

  2. 算法基础⑦搜索与图论--BFS(宽度优先搜索)

    宽度优先搜索(BFS) #include<cstdio> #include<cstring> #include<iostream> #include<algo ...

  3. python基础练习题(题目 查找字符串。)

    day39 --------------------------------------------------------------- 实例061:查找字符串 题目 查找字符串. 分析:查找字符串 ...

  4. MKL库奇异值分解(LAPACKE_dgesvd)

    对任意一个\(m\times n\)的实矩阵,总可以按照SVD算法对其进行分解.即: \[A = U\Sigma V^T \] 其中\(U.V\)分别为\(m\times m.n\times n\)的 ...

  5. XCTF练习题---MISC---功夫再高也怕菜刀

    XCTF练习题---MISC---功夫再高也怕菜刀 flag:flag{3OpWdJ-JP6FzK-koCMAK-VkfWBq-75Un2z} 解题步骤: 1.观察题目,下载附件 2.下载到电脑后发现 ...

  6. java.sql和javax.sql的区别

    根据 JDBC 规范,javax.sql 包中的类和接口首先作为 JDBC 2.0 可选包提供.此可选程序包以前与 J2SE1.2 中的 java.sql 程序包是分开的.从 J2SE1.4 开始,这 ...

  7. 探索ABP的EventHub解决方案

    在上一章中,我们构建了一个简单的全栈 Web 应用程序,我们已经看到了使用 ABP 框架开发应用的典型流程,在接下来,我们将使用 ABP 框架创建更高级的应用程序. 给出具有现实世界复杂性的例子并不容 ...

  8. Windows IDEA Community 报错

    运行时报错 "CreateProcess error=206,文件名或扩展名太长" 解决方法:https://plugins.gradle.org/plugin/ua.eshepe ...

  9. Docker学习重点(7)~DockerFile

    一.DockerFile DockerFile是用来构建docker镜像的文件,可以理解为命令参数脚本! 1.构建步骤: 编写一个dockerfile文件 docker build 构建成为一个镜像 ...

  10. 好客租房45-react组件基础综合案例-6边界问题

    边界问题 //导入react import React from 'react' import ReactDOM from 'react-dom' //导入组件 // 约定1:类组件必须以大写字母开头 ...