免费代码营 - >篝火:矮胖的猴子
free code camp -> Bonfire: Chunky Monkey
这个篝火来自自由代码阵营。
此篝火中的任务如下:
编写一个函数,将数组(第一个参数(拆分为大小长度的组(第二个参数(,并将它们作为多维数组返回。
我的代码如下:
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 ] ]
(我希望并认为空间无关紧要。如果不是这种情况,请告诉我(
但它在我写的东西中没有看到这一点。它只是看到
[ [], [] ]
有人可以告诉我出了什么问题吗?
function chunk(arr, size) {
var arr2 =[],
i=0;
while( i< arr.length){
arr2.push(arr.slice(i,i+=size));
}
return arr2;
}
无关紧要。不过我并不完全理解你的问题。你为什么得到错误的数据?
我认为您的代码中存在一个巨大的问题是您的函数正在全局范围内操作变量。将这些用于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>
写的答案。它正在工作。
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);
@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;
}
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);
当我这样做时,无法弄清楚如何使用切片方法,但是使用 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;
}
希望这有帮助。
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);
这里:
- "times"变量表示循环将被执行的次数。
例如:考虑这个数组 (["a","b","c","d","e"], 2(
这里的时间 = 3
在第一个循环中,["a"、"b"]
在第二个循环中,["c", "d"]
第三个循环,["e"]
很干净
function chunkArrayInGroups(arr, size) {
var placeholder = [];
for (i=0; i<arr.length;)
placeholder.push(arr.slice(i,i+=size));
return placeholder;
}
首先,我们创建一个空数组。我们创建一个 for 循环,但没有 i++,因为我们想分块移动。我们将切片数组推入新的空数组中。切片(i+=大小(在这里工作因为切片 (x,y( 从 x 开始,到 y-1 结束(如果您愿意,不包括 y(。
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
到输出数组中。
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;
}
编写一个函数,将数组(第一个参数(拆分为大小长度的组(第二个参数(,并将它们作为二维数组返回。
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))
我是这样做的。 希望对您有所帮助。
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);
这是另一种解决方案!
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);
- Javascript袖珍参考,第121页:这是怎么回事;猴子补丁”;方法应该有效
- 了解Javascript中的猴子补丁
- 使用油脂猴子自动点击延迟
- 猴子补丁导出功能
- 如何在没有临时变量的情况下扩展方法(猴子补丁)
- 在篡改猴子中,变量urlm的行为不同
- 带有篡改猴子错误的 MomentJS
- 是否可以在对象的默认获取器/设置器上应用猴子修补
- 猴子修补立即调用的命名函数
- 你能对YUI模块的猴子补丁方法吗?
- 猴子补丁 jquery 函数内容
- 什么是关于打字稿的猴子补丁
- 如何猴子补丁快速视图查找
- 在GNOME Shell扩展'这是猴子的补丁,这是出乎意料的
- 猴子补丁没有开火.(我猜这只猴子不会打鸭子.)
- 图像,OCR和油脂猴子
- 延时功能与油脂猴子
- 油脂猴子复制按钮
- 如何点击“显示更多”链接到油锅猴子
- 免费代码营 - >篝火:矮胖的猴子