所有对象遍历方法和数组遍历方法

178 阅读1分钟

一、js遍历对象的几种方法

1、for......in

const obj = {
            id:1,
            name:'zhangsan',
            age:18
}

 for(let key  in obj){
        console.log(key + '---' + obj[key])
  }
  
结果:  
    id---1
    name---zhangsan
    age---18

2、Object.keys(obj)、Object.values(obj)

返回值:一个表示给定对象的所有可枚举属性的字符串数组。

const obj = {
    id:1,
    name:'zhangsan',
    age:18
}
console.log(Object.keys(obj))
console.log(Object.values(obj))

结果:
 obj对象的key组成的数组
[ 'id', 'name', 'age' ]
obj对象的value组成的数组
[ 1, 'zhangsan', 18 ]

3、使用Object.getOwnPropertyNames(obj)

返回一个数组,包含对象自身的所有属性(包含不可枚举属性)

const obj = {
            id:1,
            name:'zhangsan',
            age:18
    }
Object.getOwnPropertyNames(obj).forEach(function(key){
      console.log(key+ '---'+obj[key])
 })

结果:
id---1
name---zhangsan
age---18

参考连接: www.cnblogs.com/wangdashi/p…

3、for…of 循环(重中之中)

for...of 语句创建一个循环来迭代可迭代的对象。在 ES6 中引入的 for...of 循环,以替代 for...in 和 forEach() ,并支持新的迭代协议。for...of 允许你遍历 Arrays(数组), Strings(字符串), Maps(映射), Sets(集合)等可迭代的数据结构等。

for...of 更多用于特定于集合(如数组和对象),但不包括所有对象。

像const obj = { fname: 'foo', lname: 'bar' };这种迭代会报错

注意:任何具有 Symbol.iterator 属性的元素都是可迭代的。

//1、数组
const iterable = ['11', '21', '31'];
for (const value of iterable) {
  console.log(value);
}

结果:
11
21
31

//2、Map(ES6)
var myMap = new Map();
myMap.set(0, "zero");
myMap.set(1, "one");
 
for (var [key, value] of myMap) {
  console.log(key + " = " + value);
}

结果:
0 = zero
1 = one

for (var key of myMap.keys()) {
    console.log(key);
 }
myMap.keys():用于数组创建一个包含键的可迭代对象:[Map Iterator] { 0, 1 }
结果:
0
1

for (var value of myMap.values()) {
    console.log(value);
 }
结果:
zero
one

myMap.forEach(function(value, key) {
  console.log(key + " = " + value);
}, myMap)

结果:
0 = zero
1 = one

//3、Set(集合)
//去理解ES6的map和set:https://www.runoob.com/w3cnote/es6-map-set.html

二、js遍历数组的方法还有各种总结

童欧巴的数组文章:juejin.cn/post/693752…

image.png

image.png