第十三届蓝桥杯国赛第一题:分一分

分一分

介绍

如果给你一个数组,你能很快将它分割成指定长度的若干份吗?

本题需要在已提供的基础项目中使用 JS 知识封装一个函数,达到分割数组的要求。

目标

具体要求如下:

  1. 将待分割的(一维)数组升序排序。
  2. 将排序后的数组从下标为 0 的元素开始,按照从 id=sliceNum
    的输入框中获取到的数值去分割,并将分割好的数据存入一个新数组中。如:输入框中值为 n,将原数组按每 n 个一组分割,不足 n个的数据为一组。
  3. 将得到的新数组返回(即 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]]
源html文件
<!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>

js文件
 /**
* @param {Object} oldArr
* @param {Object} num
* */
  const splitArray = (oldArr, num) => {
    // TODO:请补充代码实现功能
  
    //对原数组进行从小到大的排序
    oldArr.sort((a, b) => a - b)
    
    //定义一个新数组
    let newArr = []

	
    for (let index = 0; index < oldArr.length; ) {
 
      //slice() 方法从已有的数组中返回选定的元素。
      newArr.push(oldArr.slice(index,index+=num))
      
    }
    console.log(newArr);
    return newArr
  };
</script>
module.exports = splitArray; // 检测需要,请勿删除

你可能感兴趣的:(蓝桥杯,Web组,蓝桥杯,javascript,职场和发展)