React技巧之循环遍历对象
原文链接:https://bobbyhadz.com/blog/react-loop-through-object
正文从这开始~
遍历对象的键
在React中循环遍历对象:
- 使用
Object.keys()方法得到对象的键组成的数组。 - 使用
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中,循环遍历对象的值:
- 使用
Object.values()方法得到对象的值组成的数组。 - 使用
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技巧之循环遍历对象的更多相关文章
- for/in 循环遍历对象的属性
		
for/in 语句循环遍历对象的属性. js中获取key得到某对象中相对应的value的方法:obj.key js中根据动态key得到某对象中相对应的value的方法有二: 一.var key = & ...
 - JS完成页面跳转并传参的方法|附加:循环遍历对象
		
此方法只能传递较少参数 方法如下: <a href='page/index.html'>跳转</a> 以上是正常写法,如果要传参按一下写法: <!--参数写在?后面,多个 ...
 - cocos2d JS-(JavaScript) 几种循环遍历对象的比较
		
通常我们会用循环的方式来遍历数组.但是循环是 导致js 性能问题的原因之一.一般我们会采用下几种方式来进行数组的遍历: 方式1: for in 循环: var arr = [1,2,3,4,5]; v ...
 - javaScript for in循环遍历对象
		
for循环常被我们用来遍历数组,而如何遍历对象呢? 这时就需要用到for in循环了 写一个遍历对象名简写如下: for(var xxx in ooo){console.log(xxx)} 其中xxx ...
 - cocos2d JS-(JavaScript) cc.each循环遍历对象
		
有了它,妈妈再也不用担心我的数组会越界啦!! each()方法能使DOM循环结构简洁,不容易出错.each()函数封装了十分强大的遍历功能,使用也很方便,它可以遍历一维数组.多维数组.DOM, JSO ...
 - js for in循环遍历对象,获取key:value值
		
var testObj = { 'a':'111', 'b':'222', 'c':'333', 'd':'444'}for(var i in testObj){ console.log(i); // ...
 - Java循环遍历中直接修改遍历对象
		
Java 循环遍历中直接修改遍历对象如下,会报异常: for (ShopBaseInfo sp: sourceList) { if(sp.getId()==5){ sourceList.remove( ...
 - 如何循环遍历document.querySelectorAll()方法返回的结果
		
使用JavaScript的forEach方法,我们可以轻松的循环一个数组,但如果你认为document.querySelectorAll()方法返回的应该是个数组,而使用forEach循环它: /* ...
 - es6五种遍历对象属性的方法 - 表格整理
		
ES6 一共有5种方法可以遍历对象的属性. (1)for...in for...in循环遍历对象自身的和继承的可枚举属性(不含 Symbol 属性). (2)Object.keys(obj) Obje ...
 
随机推荐
- go - 内存分配机制详解
			
一般程序的内存分配,从高位到低位依次为 全局静态区:用于存储全局变量.静态变量等:这部分内存在程序编译时已经分配好,由操作系统管理,速度快,不易出错. 栈:函数中的基础类型的局部变量:由程序进行系统调 ...
 - 新手小白入门C语言第六章:C运算符
			
运算符是一种告诉编译器执行特定的数学或逻辑操作的符号.C 语言内置了丰富的运算符,并提供了以下类型的运算符: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 杂项运算符 小编将会为大家逐一介 ...
 - Kotlin 之 let、with、run、apply、also 函数的使用
			
一.内联拓展函数 let let 扩展函数的实际上是一个作用域函数,当你需要去定义一个变量在一个特定的作用域范围内,let函数的是一个不错的选择:let函数另一个作用就是可以避免写一些判断null的操 ...
 - nginx服务优化大全
			
第18章 nginx服务优化 18.1 复习以前的nginx知识 18.1.1 复习nginx编译安装的3部曲 ./configure 配置(开启/关闭功能),指定安装目录 make ...
 - fpm工具来制作rpm包软件
			
第1章 rpm包的制作 1.1 fpm的概念介绍 FPM功能简单说就是将一种类型的包转换成另一种类型 1.1.1.支持的源类型 类型 说明 dir 将目录打包成所需要的类型,可以用于源码编译安装的 ...
 - 【Vue3+Express实战】项目开发环境搭建
			
大家好,我是半夏,一个刚刚开始写文的沙雕程序员.如果喜欢我的文章,可以关注 点赞 加我微信:frontendpicker,一起学习交流前端,成为更优秀的工程师-关注公众号:搞前端的半夏,了解更多前端知 ...
 - 二次封装这几个 element-ui 组件后,大大减少了我 CRUD 的时间
			
element-ui 因其组件丰富.可拓展性强.文档详细等优点成为 Vue 最火的第三方 UI 框架.element-ui 其本身就针对后台系统设计了很多实用的组件,基本上满足了平时的开发需求. 既然 ...
 - 集合篇-ConcurrentHashMap
			
点赞再看,养成习惯,微信搜索「小大白日志」关注这个搬砖人. 文章不定期同步公众号,还有各种一线大厂面试原题.我的学习系列笔记. jdk1.7和jdk1.8中ConcurrentHashMap的区别? ...
 - v-show与v-if的一次事故
			
v-show等同于设置dom元素的display为none,dom元素没有消失而是被隐藏了 v-if是删除或添加dom元素,频繁地删除和添加dom元素会比较耗费性能
 - vue build 指定环境
			
前言 其实很简单的东西,搜索时很是费劲,特此记录下来.网上有很多资料,但都是五花八门,特此记录 使用 项目根目录中创建环境变量使用文件 .env #所有环境都会加载 .env.development ...