# 八.数据分类[Array]

前言

按照四个维度去探讨数组

  • 方法的作用
  • 需要传那些参数
  • 是否有返回值,返回值时什么
  • 通过此方法是否对原来的数组产生了改变

# 1.map

var newArry = ary.map(
  (item) => item * 10 /* 原来的数组不变,返回的新数组会变 */
)
1
2
3

# 2.forEach

无法 break,可以用 try/catch 中 throw new Error 来停止

ary.forEach(function (item, index) {
  console.log(item, index) //数组中有几项函数就执行几次,原来的数组不变
})
1
2
3

# 3.filter

过滤

# 4.some

有一项返回 true,则整体为 true

# 5.every

有一项返回 false,则整体为 false

# 6.join

通过制定连接符生成字符串

# 7.push

var pushAry = [12, 23, 34]
var pushRes = pushAry.push(100) // 原来的数据已经发生了改变,返回新增加后数组的长度
pushAry.push(...[1, 2, 3, 4]) // 向末尾增加多项
console.log("push", pushAry, pushRes)
1
2
3
4

扩展

不想使用 push,也想向数组的末尾增加内容

ary[ary.length] = 10
1

# 8.pop

  • 删除数组最后一项的内容
    • 参数:没有
    • 返回:被删除的那一项内容
    • 原有的数组也发生了改变
var res = ary.pop()
console.log(res, ary)
1
2

扩展

不用 pop 想删除最后一项的内容

ary.length--
ary.length -= 1
ary.length = ary.length - 1
1
2
3

# 9.unshift

向数组的开头增加一项

var res = ary.unshift(100)
console.log(res, ary)
1
2

# 10.shift

删除数组中的第一项

var res = ary.shift()
console.log(res, ary)
1
2
  • sort(fn)/reverse 排序与反转,改变原数组

# 11.concat

连接数组,不影响原数组,浅拷贝,把两个数组拼接到一起,原来的数组不变

ary1.concat(ary2) // 把 ary2 和 ary1 拼接 ary2 在后面
ary1.concat() // 把 ary1 克隆一份一模一样的数组
1
2

newArry = ary.concat(ary2);

# 12.slice(start,end)

关于数组的截取和拼接

实现数组的截取,在原来的数组中截取某一部分

slice(n, m) // 从索引 n 开始,找到索引为 m 出(不包含 m),将找到的部分已一个新的数组返回,原来的数组不变
slice(n) // 从索引 n 开始一直找到数组的末尾
slice(0) // 克隆一份一模一样的数组原来的数组不变
slice(-n)
slice(n, -m)
slice(n, m) // n 大于 m
slice(-n, -m)
slice(n, m) // n 大于 arr.length
slice(n, m) // m 大于 arr.length
1
2
3
4
5
6
7
8
9

# 13.splice(start,number,value...)

返回删除元素组成的数组,value 为插入项,改变原数组

它既能实现删除,也能实现增加,还能实现修改

var ary = [1, 3, 6, 8]
//删除
ary.splice(n, m) //从索引 n 开始,删除 m 个元素,把删除的内容以一个新的数组的方式返回,原来的数组改变
var res = ary.splice(1, 3)
console.log(res, ary)
ary, splice(n) //从索引 n 开始,删除到数组的末尾
ary.splice(0) //把原来的数组中的每一项都删除,把之前的删除的每一项的值以一个新的数组返回(把之前的数组克隆了一份,并且清空了原来的数组)
ary.splice() //返回空数组
ary.splice(ary.length - 1, 0)
//修改
splice(n, m, x) //从索引 n 开始,删除 m 个,用 x 替代删除的部分
var res = ary.splice(2, 4, 1000)
//增加
splice(n, 0, x) // 从索引 n 开始,一个都不删除,把 x 增加到 n 的前面,原来的数组改变
splice(ary.length, 0, x)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  • indexOf/lastIndexOf(value,fromIndex) 查找数组项,返回对应的下标
  • reduce/reduceRight(fn(pre,cur),defaultPrev) 两两执行,prev 为上次化简函数的 return 值,cur 为当前值(从第二项开始)

# 14.reverse

把数组倒过来排列原数组也改变

var ary = [2, 4, 523, 6, 7, 766, 23, 34]
var res = ary.reverse()
console.log(res, ary)
1
2
3

# 15.sort

给数组进行排序,原有的数组会改变

var ary = [2, 4, 523, 6, 7, 766, 23, 34]
//->ary.sort()这样的话只能处理 10 以内的数组,因为他是安装 unicode 编码的值排列的
var res = ary.sort(function (a, b) {
  return a - b
})
//这样写由小到大排序由大到小 b-a
1
2
3
4
5
6

# 16.toString

把数组转换为字符串

//->toString()加参数没有作用
var ary = [1, 3, 5]
var res = ary.toString()
console.log(ary, res)
1
2
3
4

# 17.join

按照每一个分隔符,把数组中的每一个项拼接成一个字符串,原来的数组不变

var res = ary.join("+")
console.log(res) //“1+3+5”
//-->扩展:eval->js 中把字符串变为 js 表达式执行的一个方法
eval(ary.join("+"))
1
2
3
4

# 18.flatMap

转二位数组

options.flatMap((value, i, arr) =>
                            i % 2 ? [] : [arr.slice(i, i + 2)]
1
2

提示

更多的数组方法

console.dir(Array.prototype)
1