这个篝火来自免费代码营。
本篝火的任务如下:
编写一个将数组(第一个参数)拆分为大小长度(第二个参数)的函数,并将它们作为多维数组返回。
我的代码如下:
var ars = [];
var all = [];
var ll = 0;
function chunk(arr, size) {
for (var n = 0; n < arr.length/size; n++ ) {
for(var l = 0; l < arr.length/(arr.length/size);l++) {
if(ll < arr.length){
ars[l]= arr[ll];
}
ll += 1;
}
all[n] = ars;
ars = [];
}
return all;
}
chunk([0, 1, 2, 3, 4, 5], 4);
这个特殊的块返回示例
[0,1,2,3],[4,5]]
这与检查系统认为正确相同:
[ [ 0, 1, 2, 3 ], [ 4, 5 ] ]
(我希望并认为空格无关紧要。请告诉我是不是这样)
但它并没有在我写的内容中看到这一点。它只是看到
[ [], [] ]
有人可以告诉我有什么问题吗?
答案 0 :(得分:4)
function chunk(arr, size) {
var arr2 =[],
i=0;
while( i< arr.length){
arr2.push(arr.slice(i,i+=size));
}
return arr2;
}
答案 1 :(得分:3)
空间无关紧要。我完全不明白你的问题。你得到的错误数据是什么参数?
我认为代码中的一个大问题是你的函数正在操纵全局范围内的变量。将ars
和all
的变量声明放在函数范围内。
这也有效:
function chunk(r, size) {
var n = [];
while(r.length) {
n.push(r.splice(0, size));
}
return n;
}
var r = 'abcdefghijklmnopqrstuvwxyz'.split('');
document.getElementById("result").innerHTML = "<pre>" + chunk(r, 4).join("\n") + "</pre>";
<div id="result">
</div>
答案 2 :(得分:0)
这是我写的答案。它正在发挥作用。
function chunk(arr, size) {
var up=[];
var a=0;
var b=0;
while(a<arr.length){
up[b]=[];
for(var i=0;i<size&&a<arr.length;i++){
up[b].push(arr[a]);
console.log(arr[a]);
a++;
}
b++;
}
return up;
}
chunk(["a", "b", "c", "d"], 2);
答案 3 :(得分:0)
这是@oumnya-benhassou回答的稍微清晰的版本:
function chunkArrayInGroups(arr, size) {
var output = [];
var count = 0;
while (count < arr.length) {
// while our count is less than array length, take the sub array by slicing
var slice = arr.slice(count, count + size);
// add this sub array to the output array
output.push(slice);
// increment count by size
count += size;
}
return output;
}
答案 4 :(得分:0)
function chunkArrayInGroups(arr, size) {
var holderArray = [];
for (var i = 0; i < arr.length; i = i + size) {
holderArray.push(arr.slice(i, i + size));
}
return holderArray;
}
chunkArrayInGroups(["a", "b", "c", "d"], 2);
答案 5 :(得分:0)
当我这样做时,无法弄清楚如何使用切片方法来做到这一点,但使用splice方法应该更容易理解。
function chunkArrayInGroups(arr, size) {
// Break it up.
var firstArray = arr;
var newArray = [];
//set loop condition to the length of the array, so it reduces by "size" every
//time it loops and the .splice() method is called.
while (firstArray.length>0){
newArray.push(firstArray.slice(0,size));
firstArray.splice(0, size);
}
return newArray;
}
希望这有帮助。
答案 6 :(得分:0)
function chunkArrayInGroups(arr, size) {
var times = Math.ceil(arr.length/size), start=0, tempArr=[];
for(var i=0;i<times;i++){
tempArr.push(arr.slice(start, start+size));
start = start+size;
}
return tempArr;
}
chunkArrayInGroups(["a", "b", "c", "d"], 2);
下面:
例如:
考虑一下这个数组([&#34; a&#34;,&#34; b&#34;&#34; c&#34;&#34; d&#34;&#34; e&#34;] ,2)
这里时间= 3
在第一个循环中,[&#34; a&#34;,&#34; b&#34;]
在第二个循环中,[&#34; c&#34;,&#34; d&#34;]
第三循环,[&#34; e&#34;]
答案 7 :(得分:0)
这很干净
function chunkArrayInGroups(arr, size) {
var placeholder = [];
for (i=0; i<arr.length;)
placeholder.push(arr.slice(i,i+=size));
return placeholder;
}
首先我们创建一个空数组。 我们创建一个for循环但没有i ++,因为我们想要移动块。 我们将切片数组推入新的空数组中。切片(i + = size)在这里工作 因为切片(x,y)从x开始并在y-1结束(如果你愿意,不包括y)。
答案 8 :(得分:0)
function chunk(arr, size) {
// Break it up.
var i=0,j=size,pack=[],arrOutput=[];
var loop=(arr.length/size);
for(k=0;k<loop;k++){
pack=arr.slice(i,j);
arrOutput.push(pack);
pack=[];
i=j;
j=i+size;
}
return arrOutput;
}
我使用动态指针i
和j
将原始数组剪切为size
,然后将push
剪切为outputArray。
答案 9 :(得分:0)
function chunk(arr, size) {
// Break it up.
var newarr=[];
var Len = Math.floor(arr.length/size);
var len = arr.length;
var num =len%size;
if (num===0) {
for (var i = 0; i < Len; i++) {
newarr.push(arr.splice(0,size));
}
}
else{
for (var j = 0; j < Len; j++) {
newarr.push(arr.splice(0,size));
}
newarr.push(arr.splice(0,num));
}
return newarr;
}
答案 10 :(得分:0)
编写一个将数组(第一个参数)拆分为大小长度(第二个参数)的函数,并将它们作为二维数组返回。
function chunkArrayInGroups(arr, size) {
var chunkArray = [];
for (var i = 0, len = arr.length; i <= Math.floor(len / size); i++) {
if (arr.length) chunkArray.push(arr.splice(0, size));
}
return chunkArray;
}
console.log(chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6, 7, 8], 4))
答案 11 :(得分:0)
function chunkArrayInGroups(arr, size) {
var myArr = [];
var loopCount = Math.ceil(arr.length/size);
var pos = 0;
for (var i = 0; i < loopCount; i++){
myArr.push(arr.slice(pos, size + pos));
pos += size;
}
return myArr;
}
chunkArrayInGroups(["a", "b", "c", "d"], 3);
答案 12 :(得分:0)
另一个解决方案选项 -
function chunkArrayInGroups2(arr , size) {
var b = [];
for (;arr.length > 0; arr=arr.slice(size)) {
b.push(arr.slice(0, size));
}
return b;
}
答案 13 :(得分:0)
这是另一种解决方案!
function chunkArrayInGroups(arr, size) {
// Break it up.
var result = [];
var s = 0; // Begin of the slice.
for (var i = 0; i < arr.length; i++) {
// It goes like slice(0, 2+0), then slice(2, 2+2), slice(4, 4+2).
// We increment s by 2 when we add to the array.
var n = arr.slice(s, size+s);
// Only add when slicing is not empty to prevent empty values.
if (n.length !== 0) {
result.push(n);
s += size; // Increment s by 2.
}
}
return result;
}
chunkArrayInGroups([0, 1, 2, 3, 4, 5], 3);