示例数组
const arr = [ 1234, 1234, 1234567, 12, 12, 12, 123456789999, 456, 9345, 56798987, 9999999999];
分割结果
const newArr = [
[ '1234', '1234' ],
[ '1234567' ],
[ '12', '12', '12' ],
[ '123456789999' ],
[ '456', '9345' ],
[ '56798987' ],
[ '9999999999' ]
]
方法一 较完善,支持任意长度的字符串
// let arr = [
// 7, 43, 45, 14, 19, 33, 21, 44, 12, 41, 29, 49, 30, 50, 39, 34, 11, 26, 23, 27,
// 3, 2, 51, 35, 42, 36, 20, 32, 13, 28, 17, 5, 52, 25, 48, 18, 1, 10, 46, 37, 9,
// 40, 22, 6, 31, 24, 8, 47, 15, 16, 38, 14,
// ];
const arr = [
1234, 1234, 1234567,
12, 12, 12, 123456789999,
456, 9345, 56798987,
9999999999, 34, 5677,
];
// 定义二维数组
let newArr = [];
// 定义截取开始索引,默认为0
let startIndex = newArr.length;
function cutArray(oldArray, array, size) {
const list = array.length ? array.slice() : oldArray.slice();
// 转换为字符串方便处理数据
const newArray = list.map((item) => item.toString());
let str = '';
let childArray = [];
// 循环push子数组
for (let index = 0; index < newArray.length; index++) {
const element = newArray[index];
str = str + element;
childArray.push(element);
if (str.length > size) {
break;
}
}
// 如果拼接字符串总长度大于8,则删除最后一次添加的元素
str.length > size && childArray.length > 1 ? childArray.pop() : childArray;
// console.log('childArray', childArray);
newArr.push(childArray);
startIndex = newArr.flat().length > 0 && newArr.flat().length;
// console.log('startIndex', startIndex, str.length)
const nextArray2 = oldArray.slice(startIndex);
// console.log('nextArray2', nextArray2, startIndex);
// 循环未完成递归调用
if (oldArray.length !== newArr.flat().length) {
cutArray(oldArray, nextArray2, size);
}
}
// cutArray(arr, [], 8);
cutArray(arr, [], 9);
// console.log('arr', arr)
console.log('newArr', newArr);
方法二 有严重缺陷
const arr = [ 1234, 1234, 1234567, 12, 12, 12, 123456789999, 456, 9345, 56798987, 9999999999];
const tempArr = arr.map((item) => item.toString());
let newArr = tempArr.slice();
let level2Arr = [];
const changeArr = (list) => {
let subArr = [];
let str = '';
let current = 0;
// console.log(list, 'tempArr')
for (let index = 0; index < list.length; index++) {
const element = list[index];
if (element.length >= 8) {
subArr = [element];
current = index + 1;
// console.log('subArr first', subArr);
level2Arr.push(subArr);
// 递归调用新数组
const nextArr = list.slice(current);
if (nextArr.length > 0) {
changeArr(nextArr);
}
break;
} else {
str = str + element;
// console.log('str', str)
// 此处有更多可能性,目前只满足大于6小于8, 有兴趣的可以研究下
if (str.length >= 6 && str.length <= 8) {
current = index + 1;
// subArr = element.length >= 5 ? [element] : list.slice(0, index + 1);
subArr = list.slice(0, current);
// console.log('subArr second', subArr);
level2Arr.push(subArr);
// 递归调用新数组
const nextArr = list.slice(current);
if (nextArr.length > 0) {
changeArr(nextArr);
}
break;
}
}
}
return level2Arr;
};
// changeArr(newArr);
const list2 = changeArr(tempArr);
console.log(list2);