how do you loop through javascript numbered variables?

108 views Asked by At

how do you loop through javascript numbered variables?

let count = 5;

var test1 = "test1"
var test2 = "test2"
var test3 = "test3"
var test4 = "test4"
var test5 = "test5"

for (let i = 0; i < count; i++)
{
    console.log(test{i});  //no that don't work
}

tired a few different for loops I found but could not get anything to work. New to all of this.

expecting to see the variable names... test1 test2 test3 test4 test5

Maybe I'm asking the wrong question. The problem with an Object or an Array is when I assign it to Local Storage and go back and want to delete that item, if it's in a array or object I delete everything using removeItem(keyName). That is why I wanted to created a new name/variable for each event. That way I can delete the item without removing everything else. – jondavis4

4

There are 4 answers

2
Testarea On

The problem with an Object or an Array is when I assign it to Local Storage and go back and want to delete that item, if it's in a array or object I delete everything using removeItem(keyName). That is why I wanted to created a new name/variable for each event. That way I can delete the item without removing everything else.

Probably needs some more refinement, but i think this would solve the issue stated:

function saveEvent(event){
    if(localStorage.getItem("events") != null){
        const events = JSON.parse(localStorage.getItem("events"));
        events[event.name] = event.value;
        localStorage.setItem("events",events)
    }else{
        const events = JSON.stringify({ "event1": "event description?", "event2": "another description?"})
        localStorage.setItem("events",events)
    }
}

function deleteEvent(eventName){
    if(localStorage.getItem("events") != null){
        const events = JSON.parse(localStorage.getItem("events"))
        events[eventName] = undefined;
        localStorage.setItem("events",JSON.stringify(events))
    }else{
        console.error("Events doesn't exist!")
    }
}

Maybe some explanation:

By using saveEvent(event) you would be able to either save a new event to the existing object inside the localStorage or create a new object if none exists. What the actual event-object would look obviously depends on your needs.

By using deleteEvent(eventName) the Object is read from the localStorage, if it exists, and the event is being removed from the retrieved object. After that the modified object is saved again inside the localStorage.

0
Arya DataLab On

The correct answer is

let count = 5;
var tests = ["test1", "test2", "test3", "test4", "test5"];

for (let i = 0; i < count; i++) {
    console.log(tests[i]);
}
3
symlink On

The solution most similar to your current code would be to use template variables (backticks) and the eval function, which turns a string into a var name.

let count = 5;
 
var test1 = "test1"
var test2 = "test2"
var test3 = "test3"
var test4 = "test4"
var test5 = "test5"

for (let i = 1; i <= count; i++)
{
    console.log(eval(`test${i}`));  
}

1
Mark Schultheiss On

Explained in-line in the code.

let count = 5;

var test1 = "test1";
var test2 = "test2";
var test3 = "test3";
var test4 = "test4";
var test5 = "test5";
var test345 = "test7262";
// get all the window keys - might be a lot
// all the global keys
let keys = Object.keys(window);
// lots of them console.log(keys, keys.length);
/*
const PATTERN = 'test'; // pattern to filter into (might need work if "testmealso" is one
let filteredKeys = keys.filter(name => name.includes(PATTERN)); // one way
*/

// better way perhaps:
const regex = new RegExp("^test[^\d]+", 'g');
/* explained as
^test - starts with test
[^character_group] Negation: Matches any single character that is not in character_group.
\d Matches any decimal digit.
*/
console.log(window["test345"]); // the value of one
// filter then now on the regex
const matchedSites = keys.filter((key) => key.match(regex));
console.log(matchedSites);

//console.log(filteredKeys);    
// what are they:
matchedSites.forEach(key => {
  // log key/value pairs
  console.log(key, window[key]);
});