前言
通过手写JS方法,加强对JS方法的理解,巩固原生JS基础。本次要实现的方法是数组分块,通过给定值,将数组分成指定大小,实现难度不大。
数组分块
chunk()
说明:
- 语法:
chunk(array,size)
- 功能:将数组拆分成多个
size
长度的区块,每个区块组成小数组,整体组成一个二维数组 - 例子:[1,2,3,4,5] 调用
chunk(arr,3) =>[[1,2,3],[4,5]]
实现:
-
结构:方法接收两个参数,第一个参数为原数组,第二个为每一个子数组的个数(默认为1,可以这样写
size=1
,表示如果不穿size
就默认为1) -
功能实现:
利用临时生成一个固定大小的容器,将原数组中的元素存入到容器中,如果容器满了就
push
到result
中,然后将临时数组置空。最后一次需要判断容器还有没有值,因为可能因为元素个数不够装满容器导致没有push
到result
中,所以需要将容器剩下的元素push
到result
中。-
声明两个数组变量:
result
、tmp
。先将数组存到临时数组tmp
,再存到result
,这是tmp
存在的意义 -
遍历
-
将
item
项push
到temp
中 -
判断临时数组是否已经装满
- 装满则将
temp
临时数组push
到result
中 - 置空临时数组。注意还要置空,我在自定义时忘了置空,导致临时数组长度和原数组一样
- 装满则将
-
-
判断临时数组是否大于0
- 如果大于0,则表示临时数组还有数,因为没有装满没有
push
。所以再将临时数组push
到result
中
- 如果大于0,则表示临时数组还有数,因为没有装满没有
-
返回
result
-
代码
chunk.js
function chunk(arr, size = 1) { //size=1 表示如果不传size,就默认为1
// 定义返回数组
let result = []
// 定义临时数组
let temp = []
arr.forEach(item => {
temp.push(item)
// 判断temp容器是否装满。
if (temp.length === size) {
// 装满就将临时数组push到result
result.push(temp)
// 置空临时数组。
temp = []
}
})
// 判断容器是否还有值。
if (temp.length !== 0) result.push(temp)
// 返回结果
return result
}
chunk.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="./chunk.js"></script>
</head>
<body>
<script>
let arr = [1, 2, 3, 4, 5]
let arrNew = chunk(arr)
console.log(arrNew)
</script>
</body>
</html>
\