我正在控制台中使用for loop
记录一个字符串,并将for循环索引号附加到每个字符串。但是,如果字符串与我定义的变量名称roastAboutCheapLvl1
相匹配,我希望改为显示变量内容。
到目前为止,我已经尝试过:
var roastAboutCheapLvl1 = "it works";
for (var i = 1; i <= 5; i++) {
var num = [i].toString();
var a = "roastAboutCheapLvl" + num;
console.log(a);
}
我所期望的:
it works
roastAboutCheapLvl2
roastAboutCheapLvl3
roastAboutCheapLvl4
roastAboutCheapLvl5
以上尝试我做错了什么?
答案 0 :(得分:0)
我认为您正在查询有关在javascript中创建动态变量的信息。有关如何操作,请参见此示例。
var roastAboutCheapLvl1 = "it works (1)";
var roastAboutCheapLvl3 = "it works again (3)";
for (var i = 1; i <= 5; i++) {
var aa = window['roastAboutCheapLvl' + i];
if (!aa){
console.log('roastAboutCheapLvl' + i);
}else{
console.log(aa);
}
}
请参阅以下答案以获取解释:
答案 1 :(得分:0)
只需将roastAboutCheapLvl1
变量分配给一个对象,该对象会将变量转换为key: value
对,然后从该对象中检索密钥。
在if statement
内添加第二个for loop
,以检查变量名称是否与a
匹配,如果匹配,则返回变量,否则返回a
。
查看以下代码段,了解我所描述的实际示例:
var roastAboutCheapLvl1 = "it works";
let varName = Object.keys({roastAboutCheapLvl1})[0];
for (var i = 1; i <= 5; i++) {
var num = [i].toString();
var a = "roastAboutCheapLvl" + num;
if (a === varName) {
console.log(roastAboutCheapLvl1);
} else {
console.log(a);
}
}
或者,如果您不想使用if/else statement
,则可以这样使用ternary operator
:
var roastAboutCheapLvl1 = "it works";
let varName = Object.keys({roastAboutCheapLvl1})[0];;
for (var i = 1; i <= 5; i++) {
var num = [i].toString();
var a = "roastAboutCheapLvl" + num;
a === varName ? console.log(roastAboutCheapLvl1) : console.log(a);
}
答案 2 :(得分:-1)
我了解您要执行的操作,但是您在声明变量时采用了错误的方法
声明变量时,将创建一个称为值的名称空间,该名称空间包含一个值。
例如,查看:
var MyFirstVariable = "Hi this is my first variable"
变量的名称是MyFirstVariable
MyFirstVariable的值是“嗨,这是我的第一个变量”
因此,为了使代码按您期望的方式工作,您需要这样编写:
var myVariable = "roastAboutCheapLvl1";
for (let i = 1; i <= 5; i++) {
var a = "roastAboutCheapLvl" + i.toString();
if (a === myVariable){
console.log(a);
}
}
我个人会这样写:
const myVariable = "roastAboutCheapLvl1";
(您可以使用const,因为变量是 constant ,您正在使用它与某对象进行比较,不会对其进行更改或重新分配)