javascript - 如何根据人员数组长度的可分值准备数组?
问题描述
下面是一组人员 ID
var arrPeopleIDs = [1,2,3,4,5];
我想从数组的末尾开始将它分成 N 组或更少的组。
人:5
划分:单/双(N = 2)
- 1 键单用 1
- 1 个双键,带 2,3
- 1 个双键,带 4,5
// Below output expected
var arrResult = [
[1], [2,3], [4,5]
];
人:5
划分:单/双/三(N = 3)
- 1 个双键,带 1,2
- 3、4、5 三键 1 个键
// Below output expected
var arrResult = [
[1,2], [3,4,5]
];
人:5
划分:单/双/三/四(N = 4)
- 1 键单用 1
- 1 个四边形键,带 2,3,4,5
// Below output expected
var arrResult = [
[1], [2,3,4,5]
];
有人可以帮我完成预期的输出吗?
提前谢谢你!
解决方案
创建一个函数非常简单,该函数接受一个值数组、一个大小数组以及基于此的块。
function chunkLargest(arr, chunks) {
let currentChunk = chunks.pop();
let r = [];
arr.reverse();
while (arr.length > 1) {
if (currentChunk > arr.length) {
currentChunk = chunks.pop();
}
r.push(arr.splice(0, currentChunk));
}
return r.reverse().map(e => e.reverse());
}
console.log(chunkLargest([1, 2, 3, 4, 5, 6, 7, 8], [1, 2, 3]));
.as-console-wrapper { max-height: 100% !important; top: auto; }
这个怎么运作:
首先,您使用起始块大小(数组的最后一个值chunks
)pop
来修改数组,并定义一个结果数组。然后在原始数组仍有元素时循环,检查是否需要更改块大小,然后对数组进行分块。
如果您希望它可重用,以确保原始数组不会被修改,您可以在函数内使用浅拷贝:
function chunkLargest(a, chunks) {
let arr = [...a];
let currentChunk = chunks.pop();
let r = [];
arr.reverse();
while (arr.length > 1) {
if (currentChunk > arr.length) {
currentChunk = chunks.pop();
}
r.push(arr.splice(0, currentChunk));
}
return r.reverse().map(e => e.reverse());
}
const arrPeopleIDs = [1, 2, 3, 4, 5, 6, 7, 8];
console.log(chunkLargest(arrPeopleIDs, [1, 2, 3]));
.as-console-wrapper { max-height: 100% !important; top: auto; }
推荐阅读
- c# - 如何在 C# 中计算旋转的图像坐标?
- ionic-framework - Ionic Team 是否停止了适用于 android 的 ionic devapp?
- python - python如何获取两个值之间的值
- xaml - 如何去另一个 xaml 页面 xamarin.form FlowListView
- flutter - Flutter 中 After Effects 文件的使用
- react-native - 在将项目传递给客户端之前如何保护 react-native 应用程序中的源代码
- python-3.x - Pandas 无法使用 CP1252 编码写入 csv
- java - 当用户点击加入按钮时,应该会出现“您已经加入此活动”这样的错误。如何控制它?
- android - 有什么方法可以从 fragmentmanager 获取上下文?
- r - 有没有办法将字符串拆分为 R 中的行?