【系统性、全面性的学习JS数组】

最近在重新翻看红宝书,数组用到的地方很多,但是平时用的时候却是零零散散的。
这里做个总结,把数组放到阳光下见见光。


.length 返回数组长度,可操作数组,多出的显示undefined
instanceof 检测是否是数组
Array.isArray() 检测是否是数组
.toString() 转为string类型
.valueOf() 返回本身
.toLacaleString()
.join() 指定切割符符号分割数组
.push() 往数组最后面追加
.pop() 移除数组最后面一项 和 移除并返回数组最后面一项
.shift() 移除并返回数组第一项
.unshift() 在数组最前面添加

.reverse() 翻转
.sort() 排序, 但有问题,510前面,可以配合比较函数实现排序
.concat() 拼接两个数组
.slice(1) 复制从下标 1 开始和之后的数据,.slice(1, 3)两个参数则是复制从下标 1 开始和 3 之前的数据(不包括下标 3 的数据)
.splice() 全能型 全能型 可以删除,插入,替换 .splice(1, 2, 'li', 'sheng') 两个及两个以上的参数,第一个参数是开始位置,第二个参数是删除数量,第三个及之后的位置都是要添加的数据

.indexOf() 从前往后查找,找到则返回位置,没找到则返回-1
.lastndexOf() 从后往前查找,找到则返回位置,没找到则返回-1(数据量大时从后往前查可以提高效率)


// 不会返回具体的数据,只会返回布尔类型,true 或 false
every() 循环每一项,每一项都满足条件就返回 true (必须全部满足)
some() 循环每一项,只要有一项满足添加就返回 true (只满足一项即可)
// 会返回具体的数据,返回满足条件的数据
filter() 返回满足条件的数据
map() 循环有 return (做运算 加减乘除) 返回运算后的数据
forEach() 循环并判断如有大于2 的数据则 将arr数组通过splice截取掉从下标0开始的2项数据,并将截取下来的数据和arr2数组组成一个新的数组数据


// 迭代遍历方法
raduce() 从前往后遍历
raduceRight() 从后往前遍历

.length 属性,返回数组的长度。 不是只读,可以修改数组

let arr = [1, 2, 3, 4, 5]
arr.length = 1 // [1]
arr[1] // undefined
arr.length = 6 // [1, 2, 3, 4, 5, empty]
arr[5] // undefined

检测数组

instanceof

let arr = [1, 2, 3, 4, 5]
if (arr instanceof Array) {
  console.log('arr是数组')
} else {
  console.log('arr不是数组')
}
// arr是数组

Array.isArray()

let arr = [1, 2, 3, 4, 5]
console.log(Array.isArray(arr)) // true

改变和切割数组 为 string

.toString() .valueOf() .toLacaleString

// .toString() 转换为String类型
let arr = [1, 2, 3, 4, 5]
console.log(arr.toString()) // 1, 2, 3, 4, 5

// .valueOf() 返回数组本身

.join()

// .join() 以指定的切割符,分割数组成string类型
let arr = [1, 2, 3, 4, 5]
console.log(arr.join(',')) // 1,2,3,4,5
console.log(arr.join('|')) // 1|2|3|4|5

数组添加

.push()

// .push() 往数组最后面追加
let arr = [1, 2, 3, 4, 5]
arr.push('last')
console.log(arr) // [1, 2, 3, 4, 5, 'last']

.pop()

// .pop() 移除数组最后面一项 和 移除并返回数组最后面一项
let arr = [1, 2, 3, 4, 5]
arr.pop() // 移除数组最后面一项
console.log(arr) // [1, 2, 3, 4]

let last = arr.pop() // 返回数组最后面一项
console.log(last) // 5

数组队列方法

.shift() + .push() 和 .unshift() + .pop() 可以实现队列方法。应用场景如:文字,图片轮播等滚动显示数据,

.shift()

// .shift() 移除并返回数组第一项
let arr = [1, 2, 3, 4, 5]
console.log(arr.shift()) // 1
console.log(arr) // [2, 3, 4, 5]

.unshift()

// .unshift() 在数组最前面添加
let arr = [1, 2, 3, 4, 5]
console.log(arr.unshift('first')) // 6
console.log(arr) // ['first', 1, 2, 3, 4, 5]

.reverse() 翻转

// .reverse()  翻转
let arr = [1, 2, 3, 4, 5]
console.log(arr.reverse()) // [5, 4, 3, 2, 1]

.sort() 排序 升序,最小的在最前面(但会有出现 5 排在 10 前面的问题,配合比较函数可以实现从小到大或者从大到小的排序)

// .sort() 排序
let arr = [3, 6, 1, 4, 10, 5]
console.log(arr.sort()) //[1, 10, 3, 4, 5, 6] 排序只认前面一位的数

// 配合比较函数使用,正常排序
// 从小到大
function compare(value1, value2) {
  if (value1 < value2) {
    return -1
  } else if (value1 > value2) {
    return 1
  } else {
    return 0
  }
}
console.log(arr.sort(compare)) // [1, 3, 4, 5, 6, 10]

// 从大到小
function compare(value1, value2) {
  if (value1 < value2) {
    return 1
  } else if (value1 > value2) {
    return -1
  } else {
    return 0
  }
}
console.log(arr.sort(compare)) // [10, 6, 5, 4, 3, 1]

操作方法

.concat() 拼接两个数组

let arr = [3, 6, 1, 4, 10, 5]
let objArr = ['first', 'last']
console.log(arr.concat(objArr)) //[3, 6, 1, 4, 10, 5, 'first', 'last']

.slice(1) 复制从下标 1 开始和之后的数据,.slice(1, 3)两个参数则是复制从下标 1 开始和 3 之前的数据(不包括下标 3 的数据)

let arr = [3, 6, 1, 4, 10, 5]
// 传一个参数的情况下 复制出来的数据会包括从传的参数作为下标开始和之后的数据
console.log(arr.slice(2)) // [1, 4, 10, 5]

// 传两个参数的情况下 复制出来的数据会包括从传的d第一个参数作为下标开始 第二个参数作为下标之前(不包括第二个下标)的数据
console.log(arr.slice(2, 4)) // [1, 4]

.splice() 全能型 可以删除,插入,替换

// 删除 传入两个参数,.splice(0, 2) 第一个参数是起始位置,第二个参数是删除几项。(记住:该操作会改变原数组)
let arr = [1, 2, 3, 4, 5]
console.log(arr.splice(0, 2)) // [1, 2]
console.log(arr) // [3, 4, 5]

// 插入 第一个参数 起始位置,第二个参数 删除项数(设置0则不删除),第三个参数和之后的参数是要插入的数据,后面还可以传参数作为要插入的数据
let arr = [1, 2, 3, 4, 5]
arr.splice(1, 0, 'data1')
console.log(arr) // [1, 'data1', 2, 3, 4, 5]

// 替换 第一个参数 起始位置 ,第二个参数 要删除和要插入数据的位置(同时删除该位置的数据和插入后面参数的数据),第三个参数和之后的参数 要插入的数据
let arr = [1, 2, 3, 4, 5]
arr.splice(1, 1, 'data1', 'data2')
console.log(arr) // [1, 'data1', 2, 3, 4, 5]

位置方法

.indexOf() 从前往后查找,找到则返回位置,没找到则返回-1
.lastndexOf() 从后往前查找,找到则返回位置,没找到则返回-1 (数据量大时从后往前查可以提高效率)

let arr = [1, 2, 3, 4, 5]
console.log(arr.indexOf(2)) // 1
console.log(arr.indexOf(6)) // -1

// 应用案例
// 处理过的一个复杂数组数据,要查找该数组中是否包含某一个数据
if (arr.indexOf(2) != -1) {
  // ... 包含该数据的处理
} else {
  // ... 不包含该数据的处理
}

迭代(循环)方法 (不会修改原数组)

every() 循环每一项,每一项都满足条件就返回 true
some() 循环每一项,只要有一项满足添加就返回 true

let arr = [1, 2, 3, 4, 5]
let everyResult = arr.every((item, index, array) => {
  // 必须数组中所有项都大于2才会返回true,否则返回false
  return item > 2
})
console.log(everyResult) // false

let someResult = arr.some((item, index, array) => {
  // 只要arr数组中有一项大于2就会返回true,全部都不大于2则会返回false
  return item > 2
})
console.log(someResult) // true

filter() 返回满足条件的数据

let arr = [1, 2, 3, 4, 5]
let filterResult = arr.filter((item) => {
  return item > 2
})
console.log(filterResult) // [3, 4, 5]

map() 循环有 return (做运算 加减乘除) 返回运算后的数据 (是一个函子,带运算工具的数据类型或数据结构值)

let arr = [1, 2, 3, 4, 5]
let mapResult = arr.map((item) => {
  return item * 2
})
console.log(mapResult) // [2, 4, 6, 8, 10]

forEach() 循环,没有 return (在循环中做处理)

// forEach 循环并判断如有大于2 的数据则 将arr数组通过splice截取掉从下标0开始的2项数据,并将截取下来的数据和arr2数组组成一个新的数组数据
let arr = [1, 2, 3, 4, 5]
let arr2 = ['first', 'last']
let newArr = []
arr.forEach((item) => {
  if (item > 2) {
    newArr = arr.splice(0, 2)
    newArr = newArr.concat(arr2)
  }
})
console.log(newArr) // [1, 2, 'first', 'last']

归并方法

// 迭代遍历方法
raduce() 从前往后遍历
raduceRight() 从后往前遍历

let arr = [1, 2, 3, 4, 5]
var sum = arr.reduce((prev, cur, index, array) => {
  return prev + cur // 做累加操作
})
console.log(sum)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值