数组降维和组成有序区间


一、使用背景

二、要达到的目的

三、代码复现

后期会逐渐完善

/**
 * @desc 将不连续的,离散的数组分为连续的区间所组成的数组
 * @param array 传入的数组,不连续的一维数组
 * @return 返回连续的区间组成的二维数组
 */
const sectionDiscreteArray = function (array) {
  if (array.length === 0) {
    return [];
  }
  let result = [],
    i = 0;
  result[i] = [array[0]];
  array.reduce(function (prev, cur) {
    cur - prev === 1 ? result[i].push(cur) : result[++i] = [cur];
    return cur;
  });
  return result;
}

/**
 * @desc 将连续的二维数组区间,化为只有首部尾部数的区间 
 * @example originArr = [ [1,2,3], [6], [9,10], [13,14,15] ]   
 * sectionArr = [ [1,3],[5,6],[9,10],[13,15] ]
 * originArr = [2,3,4,5,6,7,8,9,10,11]   sectionArr = [2,11]
 * @param array 传入的数组,连续的区间二维数组
 * @return 返回区间内只有首部尾部数字的区间二维数组
*/
const getSection = function (array) {
  if (array.length === 0) {
    return [];
  }
  let sectionArr = []
  array.map((item, index) => {
    if (Array.isArray(item[0])) { // 二维数组
      let subArr = []
      if (item[0].length === 1) { // 该数组是是单独的数,前需向前推1,组成区间
        subArr.unshift(item[0] - 1)
        subArr.push(...item[0])
        sectionArr.push(subArr)
      } else { // 数组是区间,取最大最小值组成区间
        subArr.unshift(Math.min(...item[0]))
        subArr.push(Math.max(...item[0]))
        sectionArr.push(subArr)
      }
    } else { // 一维数组
      if (item.length === 1) {
        let subArr = []
        subArr.unshift(Number(item) - 1)
        subArr.push(...item)
        sectionArr.push(subArr)
      } else {
        let subArr = []
        subArr.unshift(Math.min(...item) - 1)
        subArr.push(Math.max(...item))
        sectionArr.push(subArr)
      }
    }
  })
  return sectionArr
}

声明:Xuhao's Blog|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 数组降维和组成有序区间


Carpe Diem and Do what I like