对象遍历(对象forEach遍历)

àì夳堔傛蜴生んèń 2021-10-06 18:48 707阅读 0赞

对象遍历(对象forEach遍历)

    • 对象遍历
      • 对象fon in 遍历
      • 对象keys 遍历
      • 对象values 遍历
      • 对象getOwnPropertyNames遍历
      • 使用Reflect.ownKeys(obj)遍历
      • 封装Object.forEach方法遍历

对象遍历

对象fon in 遍历

尝试遍历(获取对象的键)

在JavaScript中,对象是不能使用传统的for循环进行遍历的,但是可以使用fon in来进行比遍历。

  1. var obj = {
  2. avatar:'https://a.jpg',
  3. nickName:'昵称',
  4. UID:'5616259',
  5. }
  6. for(key in obj){
  7. console.log(key)
  8. }

打印结果

以上代码执行打印的结果为

  1. => avatar
  2. => nickName
  3. => UID

获取对象的值

由此可以看出使用for in来进行对象的遍历,可以得到对象的属性,也就是key,那么我们要进行取值就可以这样做。

  1. var obj = {
  2. avatar:'https://a.jpg',
  3. nickName:'昵称',
  4. UID:'5616259',
  5. }
  6. for(key in obj){
  7. console.log(obj[key])
  8. }

代码执行后的结果为

  1. => https://a.jpg
  2. => 昵称
  3. => 5616259

对象keys 遍历

除了使用for in遍历对象,我们还可以使用Object提供的方法来进行对象的遍历。
在JavaScript中,Object提供了一个keys的方法。

获取对象自身的和继承的可枚举属性(不含Symbol属性)

  1. var obj = {
  2. avatar:'https://a.jpg',
  3. nickName:'昵称',
  4. UID:'5616259',
  5. }
  6. var keys = Object.keys(obj)
  7. console.log(keys)

返回结果

  1. => ["avatar", "nickName", "UID"]

通俗来讲,就是使用对象的keys方法可以获取到对象可枚举的属性(key)数组。
那么根据这个数组我们可以获取到对象的值。

获取对象的值

  1. var obj = {
  2. avatar:'https://a.jpg',
  3. nickName:'昵称',
  4. UID:'5616259',
  5. }
  6. var keys = Object.keys(obj)
  7. keys.forEach(item=>{
  8. console.log(item + " : " + obj[item])
  9. })

打印结果

  1. => avatar : https://a.jpg
  2. => nickName : 昵称
  3. => UID : 5616259

对象values 遍历

如果你只关注对象的值,而不关注对象的属性,那么可以尝试使用values方法来遍历对象。

  1. var obj = {
  2. avatar:'https://a.jpg',
  3. nickName:'昵称',
  4. UID:'5616259',
  5. }
  6. Object.values(obj).forEach(value=>{
  7. console.log(value);
  8. })

返回的值

  1. => https://a.jpg
  2. => 昵称
  3. => 5616259

对象getOwnPropertyNames遍历

Object.getOwnPropertyNames()方法返回一个数组,包含对象自身的所有属性(键)(不含Symbol属性,但是包括不可枚举属性)。

获取属性

  1. var obj = {
  2. avatar:'https://a.jpg',
  3. nickName:'昵称',
  4. UID:'5616259',
  5. }
  6. Object.getOwnPropertyNames(obj).forEach(key=>{
  7. console.log(key);
  8. })

打印结果

  1. => avatar
  2. => nickName
  3. => UID

使用Reflect.ownKeys(obj)遍历

Reflect.ownKeys(obj)返回一个数组,包含对象自身的所有属性,不管属性名是Symbol或字符串,也不管是否可枚举。

获取属性

  1. var obj = {
  2. avatar:'https://a.jpg',
  3. nickName:'昵称',
  4. UID:'5616259',
  5. }
  6. Reflect.ownKeys(obj).forEach(key=>{
  7. console.log(key);
  8. })

打印结果

  1. => avatar
  2. => nickName
  3. => UID

封装Object.forEach方法遍历

如果我们在开放中不想使用以上的那些方法,那么我们可以尝试一下自己封装forEach方法,将封装的方法挂在到Object原型链的构造函数中,我们就可以使用Object.forEach来进行对象的遍历。

未封装前使用Object.forEach()

不出意外,报了如下的错误
在这里插入图片描述
接下来让我们封装一下forEach吧!

封装forEach

  1. // 将自定义的方法挂载到Object的构造函数中,函数接收一个对象一个回调方法
  2. Object.prototype.constructor.forEach = function(obj,callback){
  3. // 判断回调是否是一个函数
  4. if(typeof(callback) === 'function'){
  5. let i = 0;
  6. for(let key in obj){
  7. callback(obj[key],i,key);
  8. i ++;
  9. }
  10. return;
  11. }
  12. // 传入的回调如果不是function,那么就抛出错误
  13. throw new Error (callback + ' is not a function!,You can use it like this: Object.forEach(obj,(item,index,key)=>{...}) ')
  14. }

让我们来使用一下Object.forEach方法吧

  1. var obj = {
  2. avatar:'https://a.jpg',
  3. nickName:'昵称',
  4. UID:'5616259',
  5. }
  6. Object.forEach(obj,(item,index,key)=>{
  7. console.log(item, index, key);
  8. })

返回结果

  1. => https://a.jpg 0 avatar
  2. => 昵称 1 nickName
  3. => 5616259 2 UID

我们可以看出,使用自己封装的forEach方法可以实现我们想要的结果,他能遍历出对象的值,下标(伪下标),属性。分别对应着回调方法中的item、index、key三个形参。

到此,我们的forEach方法的封装就结束了。

发表评论

表情:
评论列表 (有 0 条评论,707人围观)

还没有评论,来说两句吧...

相关阅读

    相关 js(jsjson对象)

    遍历是什么意思啊??? 在数据结构中,遍历就是指沿着某条搜索路线,依次对路线中每个结点均做一次并且只做一次访问 ![js遍历(js遍历json对象)\_js遍历(js遍