详尽分享遍历对象的几种方法

简介: 详尽分享遍历对象的几种方法

一、for in

  for in循环是最基础的遍历对象的方式,它还会得到对象原型链上的属性

const person=Object.create({

// sex和height是原型链上的属性

sex:'male',

height:168

});

//name和age是属于对象的属性

person.name='sunny';

person.age=28;

//sex和height出现在了原型链上而不是对象属性中

console.log(person);

//for in会将对象的属性和原型上的属性一块遍历出来,顺序是先对象属性然后是原型链上的属性

for(let key in person){

console.log(person【key】);//sunny 28 male 168

}

//如果需要过滤掉原型链上的属性,可以使用asOwnProperty()方法

for(let key in person){

if (person.hasOwnProperty(key)) {

console.log(person【key】) //sunny 28

}//代码效果参考:http://www.ezhiqi.com/bx/art_6523.html

}

二、Object.keys

  Object.keys()是ES5新增的一个对象方法,该方法返回对象自身属性名组成的数组,他会自动过滤掉原型链上的属性,然后可以通过数组的forEach()方法来遍历。

    const person=Object.create({

    // sex和height是原型链上的属性

  sex:'male',

    height:168

    });

//name和age是属于对象的属性

person.name='sunny';

person.age=28;

//这种方法不会遍历原型链上的属性

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

console.log(person【key】) // sunny 28

})

三、Object.getOwnPropertyNames()

  也是ES5新增的一个对象方法,该方法返回对象自身属性名组成的数组,包括不可枚举的属性,也可以通过数组的forEach()方法来遍历。

// 创建一个对象并指定其原型,bar 为原型上的属性

// baz 为对象自身的属性并且不可枚举

const obj = Object.create({

bar: 'bar'

}, {

baz: {

value: 'baz',

enumerable: false

}

}//代码效果参考:http://www.ezhiqi.com/bx/art_2557.html)

obj.foo = 'foo'

// 不包括不可枚举的 baz 属性

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

console.log(obj【key】) // foo

})

// 包括不可枚举的 baz 属性

Object.getOwnPropertyNames(obj).forEach((key) => {

console.log(obj【key】) // baz, foo

})

除此之外还有:Object.getOwnPropertySymbols()、Reflect.ownKeys等,详细讲解见如有侵权请联系删除)

相关文章
|
3月前
集合中常见方法及遍历方式
集合中常见方法及遍历方式
29 1
|
4月前
|
存储 算法 搜索推荐
|
5月前
|
存储 Java 索引
JavaSE——集合框架一(7/7)-Collection集合的总结、集合的并发修改异常问题(案例引入、for循环-解决方法、迭代器-解决方法、小结)
JavaSE——集合框架一(7/7)-Collection集合的总结、集合的并发修改异常问题(案例引入、for循环-解决方法、迭代器-解决方法、小结)
44 0
|
6月前
|
C#
C#学习相关系列之自定义遍历器
C#学习相关系列之自定义遍历器
|
6月前
|
算法 Java 程序员
Java数组全套深入探究——基础知识阶段4、数组的遍历
Java数组全套深入探究——基础知识阶段4、数组的遍历
67 0
|
6月前
|
存储 C++
关于数组的基本要点
关于数组的基本要点
48 0
|
6月前
|
Java
Java【代码分享 12】判断一个集合是否包含另一个集合中的一个或多个元素 retainAll() 及其他方法
Java【代码分享 12】判断一个集合是否包含另一个集合中的一个或多个元素 retainAll() 及其他方法
264 0
|
前端开发
前端学习案例2-对象的遍历2
前端学习案例2-对象的遍历2
72 0
前端学习案例2-对象的遍历2
|
前端开发
前端学习案例1-对象的遍历1
前端学习案例1-对象的遍历1
69 0
前端学习案例1-对象的遍历1
|
存储 算法 前端开发
嵌套遍历同一个数组的时候,试试Map优化
嵌套遍历同一个数组的时候,试试Map优化
146 0