如何遍历 JavaScript 编号变量?[复制]

how do you loop through javascript numbered variables? [duplicate]

提问人:jondavis4 提问时间:6/30/2023 最后编辑:jondavis4 更新时间:6/30/2023 访问量:88

问:

如何遍历 JavaScript 编号变量?

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
}

我厌倦了我发现的几个不同的循环,但无法让任何东西工作。 对这一切来说都是新的。

希望看到变量名称... 测试1 测试2 测试3 测试4 测试5

也许我问错了问题。对象或数组的问题在于,当我将其分配给本地存储并返回并想要删除该项目时,如果它在数组或对象中,我使用 removeItem(keyName) 删除所有内容。这就是为什么我想为每个事件创建一个新的名称/变量。这样,我就可以删除该项目,而无需删除其他所有内容。– 琼达维斯4

javascript 数组循环 变量 编号

评论

1赞 Chris G 6/30/2023
你为什么需要这样做?
2赞 Andy 6/30/2023
也许将变量更改为允许轻松迭代的数据结构,例如数组对象
0赞 jondavis4 6/30/2023
解释原因太复杂了。使用我认为无济于事的数组或对象。或者至少让我试图做的事情变得更加复杂。它与为我想要使用的每个本地存储使用变量有关。
0赞 pilchard 6/30/2023
“这与我想要使用的每个本地存储使用变量有关”听起来像是使用对象或数组的理想情况,或者在正确的情况下进行解构。
1赞 Toxiro 6/30/2023
@jondavis4 我很确定您可以通过重构代码以使用数组来轻松解决这个问题。

答:

-2赞 Arya DataLab 6/30/2023 #1

正确答案是

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

for (let i = 0; i < count; i++) {
    console.log(tests[i]);
}
0赞 symlink 6/30/2023 #2

与当前代码最相似的解决方案是使用模板变量(反引号)和 eval 函数,该函数将字符串转换为 var 名称。

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赞 XM01 - stands with Palestine 6/30/2023
不要使用 eval
1赞 Alexander Nenashev 6/30/2023
在这种特殊情况下使用没有失败,完全安全。赞成,因为它处理evalconst/let
0赞 jondavis4 6/30/2023
我认为这可能会奏效,谢谢
-1赞 Mark Schultheiss 6/30/2023 #3

在代码中内联解释。

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]);
});

评论

0赞 Mark Schultheiss 6/30/2023
注意:这严格来说是全局变量/键,因为这里提出的问题,不考虑或 ..这也没有数量限制,如果需要,可以在循环部分或其他方面考虑在内。letconst
1赞 Testarea 6/30/2023 #4

对象或数组的问题在于,当我将其分配给本地存储并返回并想要删除该项目时,如果它在数组或对象中,我使用 removeItem(keyName) 删除所有内容。这就是为什么我想为每个事件创建一个新的名称/变量。这样,我就可以删除该项目,而无需删除其他所有内容。

可能需要更多的改进,但我认为这将解决所述问题:

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!")
    }
}

也许有一些解释:

通过使用 saveEvent(event),您将能够将新事件保存到 localStorage 中的现有对象,或者创建一个新对象(如果不存在)。实际的事件对象的外观显然取决于您的需求。

通过使用 deleteEvent(eventName),将从 localStorage(如果存在)中读取 Object,并从检索到的对象中删除该事件。之后,修改后的对象将再次保存在 localStorage 中。

评论

0赞 jondavis4 6/30/2023
我会看一下,但对所有这些仍然很陌生,所以我可能需要一些时间来了解它是如何工作的。
0赞 Testarea 6/30/2023
确定!如果您有任何问题,请询问:)