1

I am trying to push the values [100,1000,10000,200,2000,20000,300,3000,30000] inside the multidimensional array in Javascript.

Multidimensional array should look like below

[[100,1000,10000],[200,2000,20000],[300,3000,30000]]

I am using the below code

var j = 0;
var x = 0;
var z = 0;
var f = new Array();
var rows = [100, 1000, 10000, 200, 2000, 20000, 300, 3000, 30000];
for (var i = 1; i <= rows.length; i++) {
 if (j < i) {
 f[x] = new Array();
 var arrval = parseInt(rows[j]);
 f[x][z] = arrval;
 z++;
 if (i % 3 == 0) {
 x++;
 z = 0;
 }
 j++;
 }
}

But the push into multidimensional array push seems to be not working. The final output is looking like [[,,10000],[,,20000],[,,30000]]

Could you please help?

Thanks in advance

kidwon
4,5425 gold badges31 silver badges46 bronze badges
asked May 23, 2014 at 9:58
0

5 Answers 5

4

Try this:

 var rows = [100, 1000, 10000, 200, 2000, 20000, 300, 3000, 30000];
 var newarr = new Array();
 /*for(var i =0; i< rows.length; i++){
 newarr.push(rows.splice(0,3));
 }
 console.log(newarr);*/
 while(rows.length){
 newarr.push(rows.splice(0,3)); 
 }

You can even make a function that would receive the number of columns as parameters.

function(orArr, nArr, cols){
 for(var i =0; i< orArr.length; i++){
 nArr.push(rows.splice(0,cols));
}

Update

: You should actually use slice() instead of splice() . as your original array would be modified if you are using splice(); In that case your code would be:

var newarr = new Array();
for(var i =0; i< rows.length; i++){
 newarr.push(rows.slice(0,3));
}
console.log(newarr);
answered May 23, 2014 at 10:26
Sign up to request clarification or add additional context in comments.

Comments

2

You are clearing f[x] each iteration!

Here is a fix :)

var rows = [100,1000,10000,200,2000,20000,300,3000,30000];
var x=0; var z=0; var f = new Array();
for (var i=1;i<=rows.length;i++) {
 if(!f[x]){
 f[x]=new Array();
 };
 f[x][z]=parseInt(rows[i-1]);
 z++;
 if(i%3==0)
 {
 x++;
 z = 0;
 }
}
answered May 23, 2014 at 10:13

Comments

1

Here's another way to do it with a single loop http://jsfiddle.net/rene3/

var f = [];
var rows = [100, 1000, 10000, 200, 2000, 20000, 300, 3000, 30000];
for (var i = 0, len = rows.length; i < len ; i++) {
 if( !(i%3) ){
 f.push([]);
 }
 f[Math.floor(i/3)].push(rows[i])
}
answered May 23, 2014 at 10:23

Comments

1
var f = [];
f.push([[100,1000,10000],[200,2000,20000],[300,3000,30000]]);

if there should be a dynamic loop, you could try:

var f = [];
var MyVal = n; // n = any value you like
var Val100, Val1000, Val10000;
for (var i=1; i<MyVal+1; i++){
Val100 = i*100;
Val1000 = i*1000;
Val10000 = i*10000;
f.push([Val100,Val1000,Val10000]);
}
answered Jan 23, 2017 at 21:09

Comments

0
var f = new Array(),
 x = 0,
 rows = [100, 1000, 10000, 200, 2000, 20000, 300, 3000, 30000];
for (var i = 0; i < rows.length; i++) {
 var a;
 if (i % 3 == 0) {
 f[x] = new Array();
 a = f[x];
 x++;
 }
 a.push(rows[i]);
}

http://jsfiddle.net/3R35Q/

answered May 23, 2014 at 10:18

Comments

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.