Looking for a solution to generate arrays with any number of dimensions, including 4D arrays.
I'm interested in being able to use the function to create an array and then access it like this: arr[3][2][23][12] = "amazing";
Looking for a solution to generate arrays with any number of dimensions, including 4D arrays.
I'm interested in being able to use the function to create an array and then access it like this: arr[3][2][23][12] = "amazing";
function createArray(size, level, array) {
if (level === 1) return [];
if (!level) level = size;
if (!array) array = [];
for (var i = 0, len = size; i < len; i += 1) {
array[i] = createArray(size, level - 1, array[i]);
}
return array;
}
var myNestedArray = createArray(4);
Update: specify the depth of a level as the first parameter and the number of levels in the second one. Example usage:
var myNestedArray = createArray(64, 4);
You can access and set values like this:
myNestedArray[X][X][X][X] = ....
Ensure X is always less than 64. For instance, you cannot do myNestedArray[X][70][X][X]
because myNestedArray[X][70]
has not been defined
Note- calling createArray(64, 4)
is slow - it generates 64 ^ 4 empty array elements (i.e. 16,777,216).
Update 2: the final value can be any number or string. For example, myNestedArray[X][X][X][Y]
where X < 64 and Y can be anything.
The algorithm has also been optimized, so feel free to try again.
Simple and quick solution:
let array = [[[[[]]]]];
Take a look at http://jsfiddle.net/PQr8T/
Note: Remember to initialize each dimension individually. The code above sets up the base for a 4-dimensional array starting at array[0]
.
Presented here is a straightforward recursive solution. The key component is the mdim function, which recursively calls itself until reaching a depth of 1, at which point it returns an empty array.
To enhance usability across multiple arrays, I have encapsulated this functionality within a prototype for Array. This allows automatic usage on arrays for improved convenience and maintainability (albeit with a slight tradeoff). Alternatively, you can extract the mdim function from the closure if preferred.
An illustrative test case is included towards the end for practical demonstration. Wishing you success in utilizing this solution! :)
// Functionality: Adds a multidimensional array of specified depth to a given array
// For convenience, I extended its functionality as a prototype for Arrays. However, you may choose
//to specifically use only the 'mdim' function
Array.prototype.pushDeepArr = function( depth ){
var arr = (mdim = function( depth ){
if( depth-- > 1 ){
return [ mdim( depth ) ];
} else {
return [];
}
})(depth);
this.push(arr);
};
// Example: Create an array, then add two multidimensional arrays - one of depth 1 and another of depth 5
x = [];
x.pushDeepArr(1);
x.pushDeepArr(5);
To create a multi-dimensional array in JavaScript, simply assign a new array to each value in an existing array with the desired number of elements.
For helpful examples and explanations, check out this tutorial. This method can be used for arrays with any number of dimensions.
var myArray = new Array(3);
for (var i = 0; i < 3; i++) {
myArray[i] = new Array(3);
for (var j = 0; j < 3; j++) {
myArray[i][j] = '';
}
}
Update Addressed some issues with the previous function; here is an improved version:
function createMultidimensionalArray(){
var args = Array.prototype.slice.call(arguments);
function helper(arr){
if(arr.length <= 0){
return;
}
else if(arr.length == 1){
return new Array(arr[0]);
}
var currArray = new Array(arr[0]);
var newArgs = arr.slice(1, arr.length);
for(var i = 0; i < currArray.length; i++){
currArray[i] = helper(newArgs);
}
return currArray;
}
return helper(args);
}
Usage
var newArray = createMultidimensionalArray(2, 3, 4, 5);
console.log(newArray); //prints the multidimensional array
console.log(newArray.length); //prints 2
console.log(newArray[0].length); //prints 3
console.log(newArray[0][0].length); //prints 4
console.log(newArray[0][0][0].length); //prints 5
Just wanted to mention, I shared a code snippet featuring a multi-dimensional array here. Take a look at the example below:
objTeams.aaastrTeamsByLeagueCityYear["NFL"]["Detroit"][2012] == "Lions".
Here is a handy function that can generate an array with multiple dimensions. You can specify the length of each dimension and the content you want to fill the array with (usually '').
function multiDimArrayGen(content, dims, dim1Length, dim2Length, dim3Length...) {
var args = arguments;
function createArray(array, dimension) {
for (var i = 0; i < args[dimension + 1]; i++) {
if (dims > dimension) {
array[i] = createArray([], dimension + 1);
} else if (dims == dimension) {
array[i] = content;
}
}
return array;
}
var newArray = [];
newArray = createArray(newArray, 1);
return newArray;
};
I find this function incredibly useful and it has saved me a lot of time.
To easily generate and initialize an array of any dimension, you can utilize the following function:
function CreateNDArray(initialValue)
{
var inputArguments = arguments;
var dimensions = arguments.length - 1;
function GenerateArray(tempArr, currentDim)
{
if(currentDim < dimensions)
{
for(var j = 0; j < inputArguments[1 + currentDim]; j++)
{
if(currentDim == dimensions - 1)
tempArr[j] = initialValue;
else
tempArr[j] = GenerateArray([], currentDim + 1);
}
return tempArr;
}
}
return GenerateArray([], 0);
}
For example, to create a 2x3 array with each element initialized as "Hello", use the function like this:
var myArray = CreateNDArray("Hello", 2, 3);
This will produce the desired array structure and set all elements to the value of "Hello".
Similarly, to create a 4-dimensional array, you can do so by using the function in the following way:
var myArray = CreateNDArray("Hello", 2, 3, 4, 5);
Hey there, I'm dealing with this XML code <book> <bookname>book1</bookname> <author>authorman</author> </book> <book> <bookname>book2</bookname> <author>authorperson</author> </book ...
Here is my customized HTML table layout <table> <thead> <tr> <td class="td20"><h3>Client Name</h3></td> <td class="td20"><h3>Details</h3></td> ...
Trying to utilize jQuery for loading html posts into the main html page and enabling external scripts to function on them. Utilizing a script (load.js) to load posts into the index.html page: $(document).ready(function () { $('#header').loa ...
Is there a way to log out a user on the server side using Supabase as the authentication provider? I initially thought that simply calling this function would work: export const getServerSideProps: GetServerSideProps = withPageAuth({ redirectTo: &apos ...
Given an array with n members and another number, m, (m <= n) which is user-input. The task at hand is to generate all possible combinations of "m" members from the array. A[5] = {a,b,c,d,e}; B = 3 Number of combinations: C(5, 3) = 10 I am looking for ...
I am currently working on a program that requires the user to input 5 distinct numbers into a 6-element one-dimensional array. These numbers need to be between 1 and 69, and must not already exist in the array. While I have successfully implemented a chec ...
I'm currently learning about redux and I'm facing an issue with accessing the stored state (id) in my components. Specifically, I have a Footer component with a button that is supposed to modify the state in the Layout component. However, I am un ...
When adding CSS styles in the specified htm file's templateUrl while loading a directive, I wonder if this is a bad idea. Will it be repeated every time the template is instantiated on the rendered page, or does Angular handle this differently? By usi ...
I am currently working on using Selenium's HtmlUnitDriver and WebElement classes in Java to automate clicking the "Download as CSV" button on Google Trends. The issue that I am encountering is that the button remains hidden until another settings men ...
I have created a web application with a dynamic JavaScript interface that communicates with the server through AJAX requests. The content of the page is determined by the data after the hashtag in the URL, which is fetched from the server and displayed acc ...
I recently started working with React and NextJS. In my project, I have an array containing role objects that I need to display on the page along with their descriptions. My goal is to show specific properties of each object when a user clicks on the respe ...
Hello everyone! I'm a beginner in Meteor programming and currently following the online book discovermeteor.com. I recently came across a chapter that covers the creation of Meteor Packages. Excitedly, I proceeded to create my own package using the ...
I downloaded the Parse server repository from parse-server-example and set up MongoDB, as well as installed Node.js packages using npm install. However, when I try to start the app with npm start, I encounter this error in the terminal!! How can I resolve ...
I've developed a dynamic form that includes an "add more" button to generate an XML file for data import purposes. Users can fill out the form and add as many entries as needed by clicking on the "add more" button. The inputted data is then processed ...
Hello! I am working with a tree object that has parent and nested children, displayed with checkboxes. When a child is checked, I need to retrieve the names of the parent and grandparent up to the entire hierarchy. Below is my JSON data: { [ ...
Currently, I have implemented the react-select API in order to provide language options for selection. <Select isMulti name="langs" options={langOptions} defaultValue={{ value: "English", label: "English", nativeNam ...
I am currently in the process of developing a JavaScript game centered around a character positioned on top of the world. Although the earth element is already part of the game, I am encountering an issue with its rotation causing it to shift position as w ...
One issue I am facing involves counting all downloads on my website. My current approach is to increment a value in my database each time a download button is clicked, and then display this value. Despite trying multiple methods, the download count always ...
Sample text: There is a new and interesting article on itlogic.com. I came across it while Mrs. Leafa was preparing dinner. I would like the following output: Array ( [0] There is a new and interesting article on itlogic.com. [1] I came across i ...
Hello there, I've encountered a puzzling problem with my website. My objective is to insert a Time.ly Calendar widget into one panel of my accordion. On this page, "TOURNAMENTS: , the widget appears exactly as desired. However, when I replicate the c ...