辨析js遍历对象与数组的方法
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语法简洁,可以与 break、continue 和 return 配合使用。
辨析js遍历对象与数组的方法的更多相关文章
- js遍历对象的属性和方法
js遍历对象的属性和方法 一.总结 二.实例 练习1:具有默认值的构造函数 实例描述: 有时候在创建对象时候,我们希望某些属性具有默认值 案例思路: 在构造函数中判断参数值是否为undefined,如 ...
- JS遍历对象和数组总结
在日常工作过程中,我们对于javaScript遍历对象.数组的操作是十分的频繁的,今天把经常用到的方法总结一下! 一.遍历对象 1.使用Object.keys()遍历 返回一个数组,包括对象自身的(不 ...
- JS遍历对象或者数组
一.纯js实现 <script> var obj = {"player_id":"GS001","event_id":" ...
- JS遍历对象的几种方法
几天前一个小伙伴问我 Object.getOwnPropertyNames() 是干什么用的 平时还真没有使用到这个方法,一时不知如何回答 从方法名称来分析,应该是返回的是对象自身属性名组成的数组 那 ...
- js遍历对象的数组
遍历数组: 1.js关键for遍历 2.jquery提供each功能 ----------------------------------- $.each(array, function(){ ...
- js声明 对象,数组 的方法
i={} 对象字面量 等同 i = new Object();i=[] 数组字面量 等同 i = new Array();
- JS合并两个数组的方法
JS合并两个数组的方法 我们在项目过程中,有时候会遇到需要将两个数组合并成为一个的情况.比如: var a = [1,2,3]; var b = [4,5,6]; 有两个数组a.b,需求是将两个数组合 ...
- jquery中each遍历对象和数组示例
通用遍历方法,可用于遍历对象和数组.$().each(),回调函数拥有两个参数: 第一个为对象的成员或数组的索引,第二个为对应变量或内容.如需退出each循环可使回调函数返回false 现有如下两个s ...
- javaScript遍历对象、数组总结(转载)
javaScript遍历对象.数组总结 转载来源 https://www.cnblogs.com/chenyablog/p/6477866.html 在日常工作过程中,我们对于javaScript遍 ...
随机推荐
- java——继承、抽象方法
基本上大量篇章都是为了解决重名造成的各种问题,如果所有名称都不会重名,那么其实不会有多大问题 父类与子类中的成员变量重名问题: 成员方法重名时如果调用方法: 继承中方法的覆盖重写: 继承中构造函数: ...
- LeetCode刷题笔记 - 12. 整数转罗马数字
学好算法很重要,然后要学好算法,大量的练习是必不可少的,LeetCode是我经常去的一个刷题网站,上面的题目非常详细,各个标签的题目都有,可以整体练习,本公众号后续会带大家做一做上面的算法题. 官方链 ...
- Spring Cloud实战: 基于Spring Cloud Gateway + vue-element-admin 实现的RBAC权限管理系统,实现网关对RESTful接口方法权限和自定义Vue指令对按钮权限的细粒度控制
一. 前言 信我的哈,明天过年. 这应该是农历年前的关于开源项目 的最后一篇文章了. 有来商城 是基于 Spring Cloud OAuth2 + Spring Cloud Gateway + JWT ...
- Java RMI 实现一个简单的GFS(谷歌文件系统)——介绍篇
本系列主要是使用Java RMI实现一个简单的GFS(谷歌文件系统,google file system),首先整体简单介绍下该项目. [为了更好的阅读以及查看其他篇章,请查看原文:https://w ...
- struct 和 class的区别
struct和class如果按照在C的时代,还是有很大差别的. c中struct的定义如下: struct 结构名 { 成员表 }: 因为struct是一种数据类型,那么就肯定不能定义函数,所以 ...
- IDEA 安装常用操作一
关于IDEA的下载,破解自行百度 一.安装完成的常用设置 SDK选择.编译版本的选择,单项目选择,全局选择 maven配置,单项目,全局配置 二.IDEA如何安装lombok https://www. ...
- 转换 React 为TypeScript
转换 React 为TypeScript JavaScript import React from 'react'; import PropTypes from 'prop-types'; class ...
- 微信小程序-显示外链图片 bug
微信小程序-显示外链图片 bug 显示外链图片 bug 403 bug 禁止外链,未授权 https://httpstatuses.com/403 image component 图片.支持 JPG. ...
- pure CSS waterfall layout
pure CSS waterfall layout 纯 CSS 瀑布流布局 flex layout .container{} .item{} https://caniuse.com/?search=c ...
- Arctic Code Vault Contributor
Arctic Code Vault Contributor GitHub Archive Program https://archiveprogram.github.com/ Preserving o ...