原文链接: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. 【ASP.NET Core】自己编程来生成自签名的服务器证书

    如果项目不大,或者是客户公司内部使用,或者不想花钱购买证书,又或者用于开发阶段测试--完全可以使用自签名证书. 所谓自签,就是自己给自己签名颁发的证书,自给自足,丰衣足食. 生成证书的方法和工具很多, ...

  2. 【SpringBoot实战】视图技术-Thymeleaf

    前言 在一个Web应用中,通常会采用MVC设计模式实现对应的模型.视图和控制器,其中,视图是用户看到并与之交互的界面.对最初的Web应用来说,视图是由HTML元素组成的静态界面:而后期的Web应用更倾 ...

  3. vue-cli4 vue-config.js配置及其备注

    // vue.config.js const path = require('path'); const CompressionWebpackPlugin = require("compre ...

  4. XCTF练习题---MISC---stage1

    XCTF练习题---MISC---stage1 flag:AlphaLab 解题步骤: 1.观察题目,下载附件 2.打开附件后发现是一张图片,初步判断是图片隐写,上Stegsolve进行转换,得到一张 ...

  5. XCTF练习题---CRYPTO---Broadcast

    XCTF练习题---CRYPTO---Broadcast flag:flag{fa0f8335-ae80-448e-a329-6fb69048aae4} 解题步骤: 1.观察题目,下载附件 2.下载完 ...

  6. 神器 Nginx 的学习手册 ( 建议收藏 )

    关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ Nginx 是一个高性能的 HTTP 和反向代理服务器,特点是占用内存少,并发能力强,事实上 ...

  7. srpingboot拦截器

    1.创建一个普通的web工程. 2.先创建需要的基础文件,比如一个用户类. package com.example.mode; public class User { private Integer ...

  8. vue项目引入TinyMCE

    1.安装 npm install @tinymce/tinymce-vue@3.0.1 -S 2.配置 <template> <!-- 富文本 --> <div> ...

  9. Python的.gitignore模板

    参考:https://github.com/github/gitignore Python的.gitignore模板,记录一下方便查询 # Byte-compiled / optimized / DL ...

  10. 流,用声明性的方式处理数据集 - 读《Java 8实战》

    引入流 Stream API的代码 声明性 更简洁,更易读 可复合 更灵活 可并行 性能更好 流是什么? 它允许以声明方式处理数据集合 遍历数据集的高级迭代器 透明地并行处理 简短定义:从支持数据处理 ...