编写一个函数,将数组(第一个参数)拆分为大小相同的组(第二个参数),并将其作为多维数组返回
Write a function that splits an array (first argument) into groups the length of size (second argument) and returns them as a multidimensional array
我正在处理一个javascript问题,该问题要求我:
编写一个函数,将数组(第一个参数(拆分为大小相同的组(第二个参数(,并将其作为多维数组返回。
例如,输入
chunk([0, 1, 2, 3, 4, 5], 2)
应返回"分块数组":[[0,1],[2,3],[4,5]]
我可以在大多数例子中使用它,但当有两个以上的块时,它会切换顺序,我不知道为什么。这是我写的代码:
function chunk(arr, size) {
var newArray = [],
i, temp = arr;
for (i = 0;i<= arr.length-size;i+=size){
newArray.push(arr.slice(i,i+size));
temp.splice(i,size);
}
newArray.push(temp);
return newArray;
}
chunk(['a', 'b', 'c', 'd'], 2);
另一个版本:
function chunk(arr, size) {
var result = [];
while (arr.length > size) {
result.push(arr.splice(0, size))
}
if (arr.length)
result.push(arr);
return result;
}
function chunk(arr, size) {
var newArr = []; // New empty array
while (arr.length > 0) { // Loop thru the array items
newArr.push(arr.splice(0, size)); // Removes first 2 items then add it to new array
}
return newArr; // New 2D array
}
我试着在控制台中使用这些代码行,它运行得非常好。
问题是,在每次迭代中,您都要将i
提前size
,并从位置i
中删除size
元素。这会导致您跳过每隔一个区块的处理。此外,您的延续条件应该是i < arr.length-size
;实际上,在循环退出后推送temp
之前,您需要测试它是否为空。尝试将循环重写为:
for (i = 0; i < arr.length-size;){
newArray.push(arr.slice(i,i+size));
temp.splice(i,size);
}
由于i
始终为0,因此循环可以简化为:
while (arr.length > size) {
newArray.push(arr.slice(0,size));
temp.splice(0,size);
}
function chunk(arr, size) {
var arr1=[];
var j=0,temp=size;
var len = arr.length/size;
for (var i=0; i<len; i++){
arr1.push(arr.slice(j,size));
j+=temp;
size+=temp;
}
return arr1;
}
chunk([0, 1, 2, 3, 4, 5], 2);
这是我的解决方案:
function chunkArrayInGroups(arr, size) {
var acum=[];
for(i=0;i<arr.length;i=i+size)
{
var vec=arr.slice(i,size+i);
acum.push(vec);
}
return acum;
}
这么多方法。。。
function chunkArrayInGroups(arr, size) {
var value = [];
for(var i =0; i<arr.length; i += size){
value.push(arr.slice(i, size+i));
}
return value;
}
chunkArrayInGroups(["a", "b", "c", "d"], 2);
function chunk(arr, size) {
var newArr = [];
// x is less than or equals arr.length.
for(var x = 0; x <= arr.length; x++){
newArr.push(arr.splice(0, size));
}
if (arr.length){
newArr.push(arr);
}
return newArr;
}
chunk(['a', 'b', 'c', 'd'], 2);
function chunkArrayInGroups(arr, size) {
var result = [],
iterations = Math.ceil(arr.length/size);
for (var i =0; i<iterations;i++){
var sub = arr.splice(0, size);
result.push(sub);
}
return result;
}
function chunkArrayInGroups(arr, size) {
var temp = [];
var result = [];
for (var a = 0; a < arr.length; a++) {
if (a % size !== size - 1)
temp.push(arr[a]);
else {
temp.push(arr[a]);
result.push(temp);
temp = [];
}
}
if (temp.length !== 0)
result.push(temp);
return result;
}
function chunkArrayInGroups(arr, size) {
var newarr=[];
var num=0;
var szie=0;
var size2=size;
if(arr.length%size==0){
szie=arr.length/size;
}
else{
var floor=arr.length/size;
szie=Math.floor(floor)+1;
}
for (let i=0;i<szie;i++){
newarr.push(arr.slice(num,size));
num=num+size2;
size=size+size2;
}
return newarr;
}
chunkArrayInGroups([0, 1, 2, 3, 4, 5], 2);
相关文章:
- jQuery数组参数和each()
- 将数组参数传递给XMLHttpRequest对象
- 使用数组参数构建URL
- 如何将JavaScript数组编码为与PHP兼容的“;数组参数“;在查询字符串中
- Ajax 无法使用带有 2D 数组参数的 C# 控制器操作
- 如何使用按数组参数过滤的角度访问嵌套的 JSON 数组数据
- 如何将变量名称用于数组参数
- 如何将“回调”数组参数传递给匿名函数
- JavaScript 无法从函数的数组参数中获取值
- 在Javascript函数中使用新的ES2015 rest参数而不是使用数组参数有什么优点
- Mongo:使用$in数组参数对结果进行排序
- 如何将数组参数从Code-behind传递给javascript
- 数组参数Vs直接参数传递给Javascript函数
- 数组参数解构抛出意外错误
- 如何创建一个基于数组参数的函数
- 如何在javascript中获取URL数组参数
- 如何将数组参数从url转换为javascript中的对象
- 如何从集合中通过数组参数获取模型
- 流星.调用检查数组参数
- Javascript数组参数问题