如果给你一个数组,你能很快将它分割成指定长度的若干份吗? 本题需要在已提供的基础项目中使用 JS 知识封装一个函数,达到分割数组的要求。
开始答题前,需要先打开本题的项目代码文件夹,目录结构如下:
其中:
├── effect.gif
├── index.html
└── js
└── index.js
其中:
effect.gif
是最终实现的效果图。index.html
是主页面。js/index.js
是需要补充代码的 js 文件。注意:打开环境后发现缺少项目代码,请手动键入下述命令进行下载:
cd /home/project
wget https://labfile.oss.aliyuncs.com/courses/9788/01.zip && unzip 01.zip && rm 01.zip
在浏览器中预览 index.html
页面,显示如下所示:
请在 js/index.js
文件中补全函数 splitArray
中的代码,最终返回按指定长度分割的数组。
具体要求如下:
id=sliceNum
的输入框中获取到的数值去分割,并将分割好的数据存入一个新数组中。如:输入框中值为 n,将原数组按每 n 个一组分割,不足 n 个的数据为一组。return
一个二维数组)。例如:
var arr = [3, 1, 4, 2, 5, 6, 7];
// 分割成每 1 个一组
var newA = splitArray(arr, 1);
console.log(newA); // => [[1],[2],[3],[4],[5],[6],[7]]
// 分割成每 2 个一组
newA = splitArray(arr, 2);
console.log(newA); // => [[1,2],[3,4],[5,6],[7]]
// 分割成每 4 个一组
newA = splitArray(arr, 4);
console.log(newA); // => [[1,2,3,4],[5,6,7]]
// 分割成每 7 个一组
newA = splitArray(arr, 7);
console.log(newA); // => [[1,2,3,4,5,6,7]]
上述仅为示例代码,判题时会随机提供数组对该函数功能进行检测。
完成后的效果见文件夹下面的 gif 图,图片名称为 effect.gif
(提示:可以通过 VS Code 或者浏览器预览 gif 图片)。
js/index.js
文件外的任何内容。/**
* @param {Object} oldArr
* @param {Object} num
* */
const splitArray = (oldArr, num) => {
// TODO:请补充代码实现功能
arr=oldArr.sort(function(a,b){
return a-b
})
let result = [];
for(let i = 0;i< arr.length;i+=num){
let subArray = oldArr.slice(i,i+num);
result.push(subArray)
}
return result;
};
module.exports = splitArray; // 检测需要,请勿删除
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>分一分</title>
<style type="text/css">
.main div {
height: 40px;
line-height: 40px;
}
#sliceNum {
width: 30px;
}
</style>
</head>
<body>
<div class="main">
<div class="old-array">
<span class="left">当前测试数组:</span>
<span id="oldArray"></span>
</div>
<div class="split-num">
<span class="left">请输入分割后子数组的长度:</span>
<input type="number" id="sliceNum" value="2" min="1" />
</div>
<div>
<button type="button" onclick="getNew()">点我分割数组</button>
</div>
<div>
<span class="left">分割后的数组:</span>
<span id="newArr"></span>
</div>
</div>
</body>
<script type="text/javascript" src="./js/index.js"></script>
<script type="text/javascript">
var oldArr = [22, 23, 34, 4, 5, 6, 76, 8, 91, 10, 11, 12];
document.getElementById("oldArray").innerText = JSON.stringify(oldArr);
function getNew() {
var num = parseInt(document.querySelector("#sliceNum").value);
var newA = splitArray(oldArr, num);
document.querySelector("#newArr").innerHTML = JSON.stringify(newA);
}
</script>
</html>
1. 文档声明与元信息:
<!DOCTYPE html>
:声明文档类型为 HTML5。<meta charset="utf-8" />
:设置字符编码为 UTF - 8,确保页面能正确显示各种字符。<title>分一分</title>
:设置页面标题,显示在浏览器标签上。2. 内联 CSS 样式:
.main div
:选择 class
为 main
的元素下的所有 div
元素,将其高度设置为 40 像素,行高也设置为 40 像素,使文本垂直居中。#sliceNum
:选择 id
为 sliceNum
的元素(即输入框),将其宽度设置为 30 像素。3. 页面结构:
<div class="main">
:作为整个页面内容的容器。<div class="old-array">
:显示当前测试数组的信息,其中 <span id="oldArray"></span>
用于动态显示数组内容。<div class="split-num">
:包含一个提示文本和一个输入框,用户可以在输入框中输入分割后子数组的长度,输入框初始值为 2,最小值为 1。<button type="button" onclick="getNew()">点我分割数组</button>
:点击该按钮会触发 getNew
函数。<div>
:显示分割后的数组信息,其中 <span id="newArr"></span>
用于动态显示分割后的数组内容。4. 脚本引入与执行:
<script type="text/javascript" src="./js/index.js"></script>
:引入外部 JavaScript 文件,该文件中包含 splitArray
函数。<script type="text/javascript">
:内联 JavaScript 代码。 var oldArr = [22, 23, 34, 4, 5, 6, 76, 8, 91, 10, 11, 12];
:定义一个测试数组。document.getElementById("oldArray").innerText = JSON.stringify(oldArr);
:将测试数组以 JSON 字符串的形式显示在页面上。function getNew()
:点击按钮时调用的函数,用于获取用户输入的分割长度,调用 splitArray
函数进行数组分割,并将分割结果显示在页面上。/**
* @param {Object} oldArr
* @param {Object} num
* */
const splitArray = (oldArr, num) => {
// TODO:请补充代码实现功能
arr=oldArr.sort(function(a,b){
return a-b
})
let result = [];
for(let i = 0;i< arr.length;i+=num){
let subArray = oldArr.slice(i,i+num);
result.push(subArray)
}
return result;
};
module.exports = splitArray; // 检测需要,请勿删除
1.函数定义:
const splitArray = (oldArr, num) => {...}
:定义一个箭头函数 splitArray
,接受两个参数 oldArr
(待分割的数组)和 num
(分割后子数组的长度)。2. 数组排序:
arr=oldArr.sort(function(a,b){ return a - b })
:对输入的数组 oldArr
进行升序排序,并将排序后的数组赋值给 arr
。不过这里存在一个小问题,变量 arr
没有使用 let
或 const
声明,会变成全局变量,建议改为 const arr = oldArr.sort((a, b) => a - b);
。3. 分割数组:
let result = [];
:初始化一个空数组 result
,用于存储分割后的子数组。for(let i = 0; i < arr.length; i += num)
:使用 for
循环遍历排序后的数组,每次循环的步长为 num
。let subArray = oldArr.slice(i, i + num);
:使用 slice
方法从当前索引 i
开始截取长度为 num
的子数组。result.push(subArray);
:将截取的子数组添加到 result
数组中。4. 返回结果:
return result;
:返回存储分割后子数组的 result
数组。5. 模块导出:
module.exports = splitArray;
:将 splitArray
函数导出,可能用于测试或其他模块引入。三、工作流程▶️ 1. 页面加载:
oldArr
,并将其以 JSON 字符串的形式显示在页面上。2. 用户输入:
3. 点击按钮:
getNew
函数。4. 数组分割:
getNew
函数获取用户输入的分割长度,调用 splitArray
函数对测试数组进行分割。splitArray
函数对输入的数组进行升序排序,然后按指定长度进行分割,将分割后的子数组存储在 result
数组中并返回。5. 结果显示:
getNew
函数将分割结果以 JSON 字符串的形式显示在页面上。