JS 数组是一种特殊的对象,不是真正的数组,它只##是通过对象来模拟数组。
JS 数组的定义
let arr = [1, 2, 3]
let arr = new Array(1, 2, 3)
通过字符串定义数组
let arr = '1, 2, 3'.split(',')
let arr = '123'.split('')
Array.from('123') // 将可能是数组的东西转换成数组。
伪数组
// 这样子拿到的数组是伪数组,没有数组的共用属性。
let divList = document.querySelectorAll('div')
Array.from('divList') // 将伪数组转换成数组。
数组的合并
将多个数组合成一个数组
arr.concat(arr1, arr2, arr3) // 将 arr, arr1, arr2, arr3 四个数组合并成一个数组
截取数组
arr.slice(startIndex, endIndex) // startIndex 不写默认为 0。
arr.slice(0) // 全部截取,用来复制数组。
数组的增删改查
删除数组
// 删除的元素会变成 empty ,数组长度不变,会变为稀疏数组,不推荐使用。
delect arr[index]
不要随便修改数组的 length.
arr.shift () 删除第一个元素
arr.pop () 删除最后一个元素
arr.splice (startIndex, delectNum) 删除中间的元素
arr.splice (startIndex, delectNum, x, y) 删除后添加
查看数组
通过对象的方法查看数组
// 不推荐
Object.keys (arr)
Object.values (arr)
for (let i in arr) {
console.log(i)
}
通过 for 循环遍历数组
for (let i = 0; i < arr.length; i++) {
console.log(`${i}: ${arr[i]}`) // 打印出数组的索引 index, 和对应的项 item。
}
通过 forEach 函数遍历数组
// 注意 function (item, index) 中的顺序不能调换。
arr.forEach (function (item, index) {
console.log(`${index}: ${item}`) // // 打印出数组的索引 index, 和对应的项 item。
})
查看数组的单个属性
arr[index]
- 注意 index 不能超过数组的长度,或者为负数
arr[arr.length] = undefined
arr[-1] = undefined
查看某个元素是否在数组中
arr.indexOf (item)
// 如果数组存在,返回对应元素第 1 次出现的索引,不存在返回 -1。
查找满足条件的元素
arr.find (item => item % 2 === 0)) // 找出数组中第一个出现的偶数
arr.findIndex((item => item % 2 === 0) // 找出数组中第一个出现的偶数的索引
arr.findLast (item => item % 2 === 0)) // 找出数组中最后一个出现的偶数
arr.findLastIndex((item => item % 2 === 0) // 找出数组中最后一个出现的偶数的索引
增加元素
arr.push (item)
在尾部增加
arr.unshift (item)
在头部增加
arr.splice (index, 0, item)
在中间增加
可同时增加多个元素。
修改元素
arr[index] = item
arr.splice (index, 1, item)
数组反转
arr.resverse ()
数组排序
arr.sort() // 默认正序
// 逆序排序,顺序排序 1 和 -1 调换位置。
arr.sort (function (a, b) {
if (a > b) {
return -1
} else if (a === b) {
return 0
} else {
return 1
}
})
数组变换
map 数组映射,n 变 n。
filter 数组过滤,n 变少。
reduce 数组求和,n 变 1。
map 示例
// 将 0 ~ 6, 转换成周日到周六。
let arr = [0, 1, 2, 4, 5, 2, 2, 3, 6, 6]
let arr2 = arr.map ((i) => {
const hash = {0: '周日', 1: '周一', 2: '周二', 3:'周三', 4: '周四', 5:'周五', 6:'周六'}
return hash[i]
})
console.log(arr2)
filter 示例
// 找出所有大于 60 分的成绩。
let scores = [95, 91, 59, 55, 42, 82, 72, 85, 67, 66, 55, 91]
let scores2 = scores.filter (scores => scores > 60)
console.log(scores2) // [95,91,82,72,85,67,66, 91]
reduce 示例
// 算出所有奇数之和。
let scores = [95, 91, 59, 55, 42, 82, 72, 85, 67, 66, 55, 91]
let sum = scores.reduce((sum, n)=>{
return n % 2===0?sum:sum+n
},0)
console.log(sum) // 奇数之和:598
资料来源:饥人谷
网友评论