欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 文化 > JS基础 -- 数组 (对象 / 数组 / 类数组 / 对象数组)的遍历

JS基础 -- 数组 (对象 / 数组 / 类数组 / 对象数组)的遍历

2025/3/16 15:37:46 来源:https://blog.csdn.net/Y1914960928/article/details/144903557  浏览:    关键词:JS基础 -- 数组 (对象 / 数组 / 类数组 / 对象数组)的遍历

一、数组:

数组是复杂数据类型,用于存储一组有序的数据。

1、创建数组:

① 使用 new 关键字:

let arr = new Array() // 创建一个长度为0的空数组
let arrLength = new Array(5) // 创建一个长度为5的空数组

② 字面量形式:

let arr = [] // 创建一个长度为0的空数组

2、给数组中添加数据:

① 创建的数组的时候,直接初始化数据:

let arrEle = ['1', 2, true]

② 通过索引添加数据:

let arr = []
arr[0] = 1
arr[arr.length] = 2

二、遍历:

1、数组:

for循环

let arr=[1,2,3,4,5,6]
for(let i =0;i <arr.length;i++) {console.log('正向遍历',arr[i])
}
for(let i =arr.length-1;i >=0;i--) {console.log('反向遍历',arr[i])
}

forEach :与for循环相比,更适用于遍历次数未知的情况。

没有返回值,不会改变原始数组

let arr=[1,2,3,4,5,6]
arr.forEach((item,index,originArr)=>{console.log('元素,索引 ---》',item,index)console.log('原始数组',originArr)
})

map:有返回值,返回的是新数组,不会改变原始数组

let arr=[1,2,3,4,5,6]
let a = arr.map((item,index,originArr)=>{console.log('元素,索引 ---》',item,index)console.log('原始数组',originArr)// 默认返回的是 undefinedreturn 'haha'+item
})
console.log('得到的新数组a',a)

for- of:用来遍历可迭代对象

let arr = ['张三','李四','王五','赵六','钱七','孙八','周九','吴十']
for(let value of arr) {console.log('元素-->', value) // 张三...
}

2、类数组:

当我们想要获取多个DOM节点,并对每一个DOM节点都进行操作时,就需要使用类数组的遍历。

for循环:比较耗性能,一般不用

② slice和call将类数组转化为数组

[ ]表示数组的实例,[ ].slice表示将数组整个进行返回,call表示将作用域提升到

document.getElementsByClassName(“modify__quarter-date”)
这个类数组中。

③ ES6中的...(扩展运算符)

for- of:用来遍历可迭代对象

3、对象:

for- in

for-in 会遍历数组里的原型链中的属性,需要使用 Object.hasOwn 或者 hasOwnProperty 来检测属性是否来自原型链。

let obj = {name:'张三',age: 52,address: '家庭住址'
}
for(let key in obj) { // key表示对象的键名console.log(obj[key]) // 得到对象的键值
}

Object.keys():得到一个以对象的索引组成的数组

let obj = {name:'张三',age: 52,address: '家庭住址'
}
console.log(Object.keys(obj)) // ['name', 'age', 'address']

Object.values():得到一个以对象的值组成的数组

let obj = {name:'张三',age: 52,address: '家庭住址'
}
console.log(Object.values(obj)) // ['张三', 52, '家庭住址']

Object.getOwnPropertyNames():得到一个以对象的索引组成的数组(包括原型上的属性)

let obj = {name:'张三',age: 52,address: '家庭住址'
}
console.log(Object.keys(obj)) // ['name', 'age', 'address']

4、对象数组:

for循环

class Person {constructor(name,age) {this.name=namethis.age=age}
}
let arr=[new Person('张三',20),new Person('李四',40),new Person('王五',60),
]
for(let i =0;i <arr.length;i++) {let age = arr[i].ageif (age>50) {console.log('年龄大于50的人',arr[i])}
}

forEach :与for循环相比,更适用于遍历次数未知的情况。

没有返回值,不会改变原始数组

class Person {constructor(name,age) {this.name=namethis.age=age}
}
let arr=[new Person('张三',20),new Person('李四',40),new Person('王五',60),
]
arr.forEach((item,index,originArr)=>{console.log('元素,索引 ---》',item,index)console.log('原始数组',originArr)
})

map:有返回值,返回的是新数组,不会改变原始数组

class Person {constructor(name,age) {this.name=namethis.age=age}
}
let arr=[new Person('张三',20),new Person('李四',40),new Person('王五',60),
]
let a = arr.map((item,index,originArr)=>{console.log('元素,索引 ---》',item,index)console.log('原始数组',originArr)// 默认返回的是 undefinedreturn 'haha'+item.name
})
console.log('得到的新数组a',a)

for- of:用来遍历可迭代对象

class Person {constructor(name,age) {this.name=namethis.age=age}
}
let arr=[new Person('张三',20),new Person('李四',40),new Person('王五',60),
]
for(let value of arr) {console.log('元素--》',value)
}

5、性能:for循环 > for...of > forEach > for...in > map

三、数组中的方法:

这部分还在更新,以下数据不正确

1、slice和splice:数组中截取数据。

slice

  • 不影响原数组。
  • 包含开始索引、不包含结束索引。
  • slice(1, -2) // 表示从索引1开始截取,从倒数第二个元素结束截取。

splice

  • 影响原数组。
  • splice(1, 2) // 表示从索引1开始截取,截取2个元素。
  • splice(1, 1, “替换的第1个元素”, “替换的第2个元素”, “替换的第3个元素”) // 表示替换索引1的元素
  • splice(1, 0, “新增的第1个元素”, “新增的第2个元素”, “新增的第3个元素”) // 表示在索引1后面新增元素
    在这里插入图片描述
    在这里插入图片描述

2、call和apply:

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词