I get the following error
"Uncaught TypeError: Cannot read property 'push' of undefined"
When I try to run the following code:
function chunkArrayInGroups(arr, size) {
// Break it up.
var arr_final=[];
for(var i=0,j=0;i<arr.length;i++)
{
arr_final[j].push(arr[i]);
if(i===size)
{
j++;
}
}
return arr_final;
}
console.log(chunkArrayInGroups(["a", "b", "c", "d"], 2));
Can anyone help?
Instead of
arr_final[j].push(arr[i]);
do something like
arr_final.push(arr[i]);
You forgot to initialize each chunk with an empty array. Corrected code below:
function chunkArrayInGroups(arr, size) {
// Break it up.
var arr_final=[[]]; // <-- initialize chunk
for(var i=0,j=0;i<arr.length;i++)
{
arr_final[j].push(arr[i]);
if(i===size)
{
arr_final.push([]); // <-- initialize chunk
j++;
}
}
return arr_final;
}
console.log(chunkArrayInGroups(["a", "b", "c", "d"], 2));
I'm guessing there is also an error in your chunking logic, so probably what you really want is:
function chunkArrayInGroups(arr, size) {
// Break it up.
var arr_final=[];
for(var i=0,j=-1;i<arr.length;i++)
{
if (i % size === 0) {
arr_final.push([]);
j++;
}
arr_final[j].push(arr[i]);
}
return arr_final;
}
console.log(chunkArrayInGroups(["a", "b", "c", "d"], 2));
In order to split your input array into multiple chunks with length ≤ size, you need to initialize a new empty chunk arr_final.push([])
each time your iterator variable i
has reached a multiple of size
- which you can check via the modulo operator:
function chunkArrayInGroups(arr, size) { // Break it up. var arr_final = []; for (var i = 0, j = -1; i < arr.length; ++i) { if (i % size == 0) { arr_final.push([]); j++; } arr_final[j].push(arr[i]); } return arr_final; } console.log(chunkArrayInGroups(["a", "b", "c", "d", "e"], 3));
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.