1     遍历对象的方法?

(1) for…in(也可遍历数组,但效率较低,一般用来遍历对象)

示例:

 // 生成一个原型上有属性并且有可枚举属性与不可枚举属性的对象

      const data = Object.create({

        name: "这是原型上的属性", //生成原型上的属性

      });

      data.age = 23; // 对象自身(可枚举)属性

      Object.defineProperty(data, "sex", {

        // 对象自身的不可枚举属性

        value: "女",

        Enumerable: false, //不可枚举

      });

      // 使用for...in遍历data

      for (let key in data) {

        console.log(key); // 获得data自身可枚举属性及原型上的属性

        // 结果: age、name

      }

(2) Object.keys()

示例:

// 生成一个原型上有属性并且有可枚举属性与不可枚举属性的对象

      const data = Object.create({

        name: "这是原型上的属性", //生成原型上的属性

      });

      data.age = 23; // 对象自身(可枚举)属性

      Object.defineProperty(data, "sex", {

        // 对象自身的不可枚举属性

        value: "女",

        Enumerable: false, //不可枚举

      });

    //   使用Object.kes遍历data

    Object.keys(data).forEach(key=>{

        console.log(key) // 获得data自身可枚举属性

      // 结果: age

    })

(3) Object.getOwnPropertyNames()

示例:

// 生成一个原型上有属性并且有可枚举属性与不可枚举属性的对象
const data = Object.create({ name: "这是原型上的属性", //生成原型上的属性 }); data.age = 23; // 对象自身(可枚举)属性 Object.defineProperty(data, "sex", { // 对象自身的不可枚举属性 value: "女", Enumerable: false, //不可枚举 }); console.log(data); // 使用Object.getOwnPropertyNames()遍历data Object.getOwnPropertyNames(data).forEach(key=>{ console.log(key) // 获得data自身可枚举属性及不可枚举属性 // 结果: age、sex })

总结

for…in获取对象自身的可枚举属性及原型上的属性(可通过hasOwnProperty()过滤原型上的属性);

Object.keys只获取对象自身的可枚举属性;

Object.getOwnPropertyNames获取对象自身的可枚举及不可枚举属性。

2  遍历数组的方法?

(1) for循环

示例:

const data = [

        { id: 1, name: "张三" },

        { id: 2, name: "李四" },

        { id: 3, name: "王五" },

      ];

      //   for循环

      for (let i = 0; i < data.length; i++) {

        console.log(data[i]);

      }

      // 优化效率的for循环(将length进行缓存)

      for (let i = 0, length = data.length; i < length; i++) {

        console.log(data[i]);

      }

(2) forEach

示例:

// 数组的遍历

      const data = [

        { id: 1, name: "张三" },

        { id: 2, name: "李四" },

        { id: 3, name: "王五" },

      ];

    //   forEach遍历

    data.forEach(ee=>{

        console.log(ee)

    })

(3) while遍历

示例:

// 数组的遍历

      const data = [

        { id: 1, name: "张三" },

        { id: 2, name: "李四" },

        { id: 3, name: "王五" },

      ];

    //   while遍历

    let i=0;

    while(i<data.length){

        console.log(data[i]);

        i++

    }

(4) map

示例:

// 数组的遍历

      const data = [

        { id: 1, name: "张三" },

        { id: 2, name: "李四" },

        { id: 3, name: "王五" },

      ];

    //   map遍历

    data.map(ee=>{

        console.log(ee)

    })

(5) for…of

示例:

// 数组的遍历

      const data = [

        { id: 1, name: "张三" },

        { id: 2, name: "李四" },

        { id: 3, name: "王五" },

      ];

    //   for...of遍历

    for(let i of data){

        console.log(i)

    }

总结

    for写法麻烦,每一步需要手动处理;

foreach遍历数组的每一项,不影响原数组,性能差,不能中断循环,也不能return;

map支持return,返回值相当于克隆了一份数据,可改变克隆的部分但不影响原数组;

for…of语法简洁,可以与 breakcontinue 和 return 配合使用。

辨析js遍历对象与数组的方法的更多相关文章

  1. js遍历对象的属性和方法

    js遍历对象的属性和方法 一.总结 二.实例 练习1:具有默认值的构造函数 实例描述: 有时候在创建对象时候,我们希望某些属性具有默认值 案例思路: 在构造函数中判断参数值是否为undefined,如 ...

  2. JS遍历对象和数组总结

    在日常工作过程中,我们对于javaScript遍历对象.数组的操作是十分的频繁的,今天把经常用到的方法总结一下! 一.遍历对象 1.使用Object.keys()遍历 返回一个数组,包括对象自身的(不 ...

  3. JS遍历对象或者数组

    一.纯js实现 <script> var obj = {"player_id":"GS001","event_id":" ...

  4. JS遍历对象的几种方法

    几天前一个小伙伴问我 Object.getOwnPropertyNames() 是干什么用的 平时还真没有使用到这个方法,一时不知如何回答 从方法名称来分析,应该是返回的是对象自身属性名组成的数组 那 ...

  5. js遍历对象的数组

    遍历数组: 1.js关键for遍历 2.jquery提供each功能 ----------------------------------- $.each(array, function(){     ...

  6. js声明 对象,数组 的方法

    i={} 对象字面量 等同 i = new Object();i=[] 数组字面量 等同 i = new Array();

  7. JS合并两个数组的方法

    JS合并两个数组的方法 我们在项目过程中,有时候会遇到需要将两个数组合并成为一个的情况.比如: var a = [1,2,3]; var b = [4,5,6]; 有两个数组a.b,需求是将两个数组合 ...

  8. jquery中each遍历对象和数组示例

    通用遍历方法,可用于遍历对象和数组.$().each(),回调函数拥有两个参数: 第一个为对象的成员或数组的索引,第二个为对应变量或内容.如需退出each循环可使回调函数返回false 现有如下两个s ...

  9. javaScript遍历对象、数组总结(转载)

    javaScript遍历对象.数组总结  转载来源 https://www.cnblogs.com/chenyablog/p/6477866.html 在日常工作过程中,我们对于javaScript遍 ...

随机推荐

  1. Successor HDU - 4366 分块

    代码+注释: 1 /* 2 题意: 3 一共有n个人,其中0号是总裁(金字塔顶尖).后面输入其他n-1个人的信息啊a.b.c,分别代表第i个人的上级是a,他的 4 忠诚度为b,他的能力为c.后面有m次 ...

  2. Nginx基础 - 通用优化配置文件

    [root@localhost ~]# vim /etc/nginx/nginx.conf user nginx; worker_processes auto; worker_cpu_affinity ...

  3. 二进制安装kubernetes(五) kubelet组件安装

    概述资料地址:https://blog.csdn.net/bbwangj/article/details/81904350 Kubelet组件运行在Node节点上,维持运行中的Pods以及提供kube ...

  4. 力扣119.杨辉三角II-C语言实现

    题目 给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行. 在杨辉三角中,每个数是它左上方和右上方的数的和. 示例: 输入: 3 输出: [1,3,3,1] 来源:力扣(LeetCod ...

  5. select函数详细用法解析

    1.表头文件 #include #include #include 2.函数原型 int select(int n,fd_set * readfds,fd_set * writefds,fd_set ...

  6. redis键过期时间

    redis服务器中每个数据库都是一个redisDb,而redisDb实质上是一个字典的模型,数据库的每一个键都是一个字典的键值,对数据库的增删改查也就是对字典对象的增删改查. redis在维护带有过期 ...

  7. redis跳表

    redis使用跳表作为有序集合的底层实现之一,下面来看下跳表的结构 一.跳表的结构

  8. Netty(二)Netty 与 NIO 之前世今生

    2.1 Java NIO 三件套 在 NIO 中有几个核心对象需要掌握:缓冲区(Buffer).选择器(Selector).通道(Channel). 2.1.1 缓冲区 Buffer 1.Buffer ...

  9. 手工数据结构系列-C语言模拟队列和栈 hdu1702

    #include <stdio.h> #include <stdlib.h> //================= DATA STRUCTURE ============== ...

  10. 网站备案查询/ICP备案查询网

    网站备案查询/ICP备案查询网 互联网站备案信息全国公安机关互联网站安全服务平台http://www.beian.gov.cn/portal/index 1 http://www.miitbeian. ...