一、使用背景
二、要达到的目的
三、代码复现
后期会逐渐完善
/**
* @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
}
前端同学
你好,能留个邮箱或者微信吗~