I want to create multiple arrays that contain the same basic layout. Currently, i have
Array(10); //base array with moving blocks
for(var i = 0; i < 10; i++){ //creating an array within an array (2d)
base[i] = new Array(22);
}
var background = new Array(10); //background array with stationary blocks
for(var z = 0; z < 10; z++){ //same as before
background[z] = new Array(22);
}
var nextBlock = new Array(10); //next block array
for(var i = 0; i <10; i++){
nextBlock[i] = new Array(22);
}
and would like to have something similar to:
function arrayCreator(rows,cols){
var array = newArray(rows);
for(var i = 0;i < rows;i++){
array[i] = newArray(cols);
}
}
var base = arrayCreator(10,22);
var background = arrayCreator(10,22);
var nextBlock = arrayCreator(10,22);
but cant get it working. How should I approach this?
Looks like you forgot the return statement.
function arrayCreator(rows,cols){
var array = newArray(rows);
for(var i = 0;i < rows;i++){
array[i] = newArray(cols);
}
return array;
}
Related
I want to initialize and then print the elements of a 2D array using javascript.
I wrote this code but nothing displays as output. How to output this array?
var m = 6;
var n = 3;
var mat = new Array[m][n];
for (i = 0; i < mat.length; i++) {
for (j = 0; j < mat[i].length; j++) {
mat[i][j]) = i * j;
document.writeln(mat[i][j]);
}
document.writeln("<br />");
}
<html>
<body>
</body>
<script>
var m=6;
var n=3;
var mat =new Array(m);
for( var i=0; i < m ; i++){
mat[i] = new Array(n);
for( var j=0;j< n ;j++){
mat[i][j] = i*j;
document.writeln(mat[i][j]);
}
document.writeln("<br />");
}
</script>
</html>
As BenG pointed out, you've got an extra ) but you also aren't initializing your array correctly. Javascript doesn't allow you to declare multi-dimensional arrays like other languages. Instead, you'd have to do something more like this:
var m = 6;
var n = 3;
var mat = new Array(m);
for (var i = 0; i < m; i++) {
mat[i] = new Array(n);
}
Javascript arrays are dynamic. They will grow to the size you require. You can call push() to add a new element to the array. It's also worth noting that you should avoid using the new keyword with objects and arrays. Use their literal notations [] for arrays and {} for objects. So a better solution here would be to push to the arrays as you need them.
var mat = [];
var m = 6;
var n = 3;
for (var i = 0; i < m; i++) {
// Let's add an empty array to our main array
mat.push([]);
for (var j = 0; j < n; j++) {
mat[i].push(i * j);
document.writeln(i * j);
}
document.writeln('<br />');
}
Can I use variable to do the second for loop so it list out all data in GroupA1 and GroupB1.
Tried but fail.. anyone have idea how to make it work?
for example
function Loop(){
var AllGroup=["GroupA1","GroupB1"]
var GroupA1=["A1","A2"]
var GroupB1=["B1","B2"]
var Group=""
for(var i = 0; i < AllGroup.length; i++){
Group=AllGroup[i]
var SubGroup=""
for(var x = 0; x < Group.length; x++){
SubGroup=Group[x]
alert(SubGroup);
}
}
}
Hopefully my sample code can help you to deal with your question
For example
<script>
var GroupA1=["A1","A2"]
var GroupB1=["B1","B2"]
var Group=""
var AllGroup = [GroupA1, GroupB1]
for(var i = 0; i < AllGroup.length; i++){
Group=AllGroup[i]
var SubGroup=""
for(var x = 0; x < Group.length; x++){
SubGroup=Group[x]
alert(SubGroup);
}
}
</script>
Do it this way:
function loop(){
var GroupA1=["A1","A2"]
var GroupB1=["B1","B2"]
var AllGroup=[GroupA1,GroupB1]
var Group=""
for(var i = 0; i < AllGroup.length; i++){
Group=AllGroup[i]
var SubGroup=""
for(var x = 0; x < Group.length; x++){
SubGroup=Group[x]
alert(SubGroup);
}
}
}
Declare the arrays first then use them as objects in the next array.
This is the structure I would recommend, which is more logical, instead of what you're using.
function Loop(){
//The object AllGroups contains all the other groups
var AllGroups = {
"GroupA1": ["A1","A2"],
"GroupB1": ["B1","B2"]
};
for(var group in AllGroups){
if(AllGroups.hasOwnProperty(group)){
//Access each group in AllGroups
for(var i = 0; i < AllGroups[group].length; i++){
console.log(AllGroups[group][i]); //A1, A2, B1, B2
}
}
}
}
Rearrange code like this so that AllGroup is a collection containing GroupA1 and GroupB1:
function Loop() {
var GroupA1=["A1", "A2"];
var GroupB1=["B1", "B2"];
var AllGroup=[GroupA1, GroupB1];
var Group = null;
for(var i = 0; i < AllGroup.length; i++){
Group = AllGroup[i];
var SubGroup = "";
for(var x = 0; x < Group.length; x++){
SubGroup = Group[x];
alert(SubGroup);
}
}
}
Before you were referencing the strings "GroupA1" "GroupB1" not the actual data contained in the subgroups that you create.
I want to create a multidimensional array like this:
array[0][1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
array[1][21,22,23,24,25,26,27....]
array[.][....]
How can I do this in Javascript?
I have tried this:
var squares = new Array();
for(var i = 1; i <= 8; i++)
{
for(var j = 1; j <= 20; j++)
{
squares.push(i, j);
}
}
How can I accomplish this?
You can do something like this:
var squares = new Array();
for(var i = 0; i <= 8; i++)
{
squares[i] = new Array();
for(var j = (i * 20) + 1; j <= 20 * i + 20; j++)
if (squares[i] == null)
squares[i] = j;
else
squares[i].push(j);
}
Output comes like:
array[0][1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
array[1][21,22,23,24,25,26,27....]
var array = []; // Main array
var numArrays = 10, // Number of sub-arrays
numPerArray = 20; // Number of squares per sub-array
for(var i = 0; i < numArrays; i++){
var subArray = [];
// Number to start at
var start = i * numPerArray;
// Count up to start + numPerArray
for(var j = start; j < start + numPerArray; j++){
subArray.push(j);
}
// Add to main array
array.push(subArray);
}
Use modulus operand to limit the inner array's size
var limit = 80
var inner_limit = 20
var square=[]
var inner =[]
for(var i=1;i<=limit;i++){
inner.push(i)
if(i%inner_limit==0){
square.push(inner)
inner = []
}
}
You can do it with two "for" loops. In the first loop you go through the main array and for each element add the elements from the second loop.
var arrayLength = 10; // Main array length
var limit = 20; // Number of squares
var array = [];
for ( var i = 0; i < arrayLength; i++ )
{
array[i] = []; // Create subArray
for( var j = 1; j <= limit; j++ )
{
array[i].push(j);
}
}
Here's a pseudocode example about what I'm trying to do:
var totalLanguages = XX;
for(var i = 0; i < totalLanguages; i++){
var dynamicArray + i = new Array();
/*.....*/
}
I need to create dynamically many arrays as the value of totalLanguages which can be either number.
This is to be able to do something like this:
for(var i = 0; i < totalLanguages; i++){
var arrayLanguages["es"] = dynamicArray+i;
var arrayLanguages["en"] = dynamicArray+i;
}
Is there any way to do this?
var languageNames = ['en', 'es'];
var languages = {};
for (var i = 0; i < languageNames.length; i++) {
languages[languageNames[i]] = [];
}
You are basically trying to recreate an array with variable names. Just use an Array to start out!
var dynamicArray = [];
for(var i = 0; i < totalLanguages; i++) {
dynamicArray[i] = new Array();
}
You can use multi-dimensional arrays:
var languagesArray = new Array(totalLanguages);
for(var i = 0; i < totalLanguages; i++) {
var innerArray = new Array();
innerArray.push("Hello");
innerArray.push("World");
languagesArray[i] = innerArray;
}
console.log(languagesArray[0][0]);
See: How can I create a two dimensional array in JavaScript?
How about:
for(var i = 0; i < totalLanguages; i++){
window["dynamicvariable " + i] = new Array();
/*.....*/
}
function split(str)
{
var array = str.split(';');
var test[][] = new Array();
for(var i = 0; i < array.length; i++)
{
var arr = array[i].split(',');
for(var j = 0; j < arr.length; j++)
{
test[i][j]=arr[j];
}
}
}
onchange="split('1,2,3;4,5,6;7,8,9;a,b,c;d,e,f;g,h,i')"
it was not working. i need to split this string to 6*3 multi dimentional array
var array[][] = new Array() is not valid syntax for declaring arrays. Javascript arrays are one dimensional leaving you to nest them. Which means you need to insert a new array into each slot yourself before you can start appending to it.
Like this: http://jsfiddle.net/Squeegy/ShWGB/
function split(str) {
var lines = str.split(';');
var test = [];
for(var i = 0; i < lines.length; i++) {
if (typeof test[i] === 'undefined') {
test[i] = [];
}
var line = lines[i].split(',');
for(var j = 0; j < line.length; j++) {
test[i][j] = line[j];
}
}
return test;
}
console.log(split('a,b,c;d,e,f'));
var test[][] is an invalid javascript syntax.
To create a 2D array, which is an array of array, just declare your array and push arrays into it.
Something like this:
var myArr = new Array(10);
for (var i = 0; i < 10; i++) {
myArr[i] = new Array(20);
}
I'll let you apply this to your problem. Also, I don't like the name of your function, try to use something different from the standards, to avoid confusion when you read your code days or months from now.
function split(str)
{
var array = str.split(';'),
length = array.length;
for (var i = 0; i < length; i++) array[i] = array[i].split(',');
return array;
}
Here's the fiddle: http://jsfiddle.net/AbXNk/
var str='1,2,3;4,5,6;7,8,9;a,b,c;d,e,f;g,h,i';
var arr=str.split(";");
for(var i=0;i<arr.length;i++)arr[i]=arr[i].split(",");
Now arr is an array with 6 elements and each element contain array with 3 elements.
Accessing element:
alert(arr[4][2]); // letter "f" displayed