【问题标题】:JavaScript: Dynamically Creating Variables for LoopsJavaScript:为循环动态创建变量
【发布时间】:2021-04-09 01:05:32
【问题描述】:

如何使用 for 循环动态创建变量并返回。

function createVariables()
{
for ( i=0; i<=20; i++ )
    {
        var account = i;
        return var account + i;
    }
 }

目标是得到以下结果:

var account1;
var account2;
var account3; and etc.....

【问题讨论】:

    标签: javascript


    【解决方案1】:

    你应该使用一个数组:

    function createVariables(){
      var accounts = [];
    
      for (var i = 0; i <= 20; ++i) {
          accounts[i] = "whatever";
      }
    
      return accounts;
    }
    

    然后您可以通过accounts[20] 访问accounts[0]

    【讨论】:

    • 想法是用我们拥有的字符串创建变量......例如,我有数组 var arr = ['myOwnName'];并由此创建一个名为 var myOwnName; 的变量
    • 您无法动态创建新变量,但您可以考虑为此目的使用Map
    【解决方案2】:

    我知道如何做到这一点的唯一方法是使用 JavaScript eval 函数。

    类似eval("account" + 1 + "='some value'");

    http://www.w3schools.com/jsref/jsref_eval.asp

    不过,我认为@Domenic 有更好的答案。

    【讨论】:

    • 他的回答只有在你知道你需要什么变量的情况下才是好的。
    【解决方案3】:

    我对@9​​87654321@ 不确定,但是我自己在寻找答案时偶然发现了这个问题。

    for (var i = 1; i < 11; i++) { // Creating 10 objects
    window["Object"+i] = new Object();
    }
    console.log(Object7); // is not undefined
    

    上述代码在创建动态对象时循环到 10,如 https://www.codecademy.com/en/forum_questions/51068e93f73ad4947a005629 中所述

    【讨论】:

    • 绝对比上面的eval() 推荐好多了。谢谢!
    • 绝对不行,node.js不知道window是什么。问题是关于 js 的,没有指定这只能在浏览器中工作
    【解决方案4】:

    您可以使用 eval() 方法在执行传递给它的 JavaScript 语句时声明动态变量。

    function createVariables()
    {
        for ( i=0; i<=20; i++ )
        {
            var str ="account"+ i+" = undefined";
            //Declaring and Setting dynamic variable to undefined using eval
            eval(str);
        }
    }
    createVariables();
    

    【讨论】:

      【解决方案5】:

      我发现这是一个最简单的解决方案

      for (var i = 0; i < 10; i++) {
         this["RONAK"+i] = "MY VAL";
      }
      

      输出

      RONAK0 = "MY VAL"
      RONAK1 = "MY VAL"
      RONAK2 = "MY VAL"
      ...
      RONAK9 = "MY VAL"
      

      【讨论】:

        【解决方案6】:
        let etc = { name: 'foobar', city: 'xyz', company: 'companyName' };
        
        Object.keys(etc).forEach(key=>{
        window[`${key.toUpperCase()}`] = new Object(`${etc[`${key}`]}`)
        });
        
        console.log("-->"+NAME) //foobar
        

        这类似于@whatevermike 所描述的,但它在 NodeJS 中不起作用,因为它使用 window。 :(

        【讨论】:

          【解决方案7】:
          function createVariables() {
              var accounts = [];
              for (var i = 0; i <= 20; ++i) {
                  accounts[i] = "merhaba" + i;
              }
              return accounts;
          }
          

          【讨论】:

          • 在您的代码中添加解释会很有帮助,以便 OP 和其他人更好地理解它。
          【解决方案8】:

          以下代码实际上会创建变量,而不是创建@Domenic 提出的这种哈希表

              function createVariables(){
                  var varName = "accounts";
          
                  for (var i = 0; i <= 20; ++i) {
                      eval('var ' + varName + i + ' = ' + '"whatever"' + ';');
                  }
          
                  return accounts;
              }
          

          【讨论】:

            【解决方案9】:

            我为我用代码制作迭代变量的方式感到非常自豪,我打算分享它,但我想我只是向你展示它的修改版本。

            function variableBuilder() {
               let i = 0;
               while (i <= 20) {
                  let accountVariable = "account".concat(i);
                  `// variable can even be reassigned here`
                  console.log(accountVariable);
                  i++;
               }
            }
            

            您可以在我建议的地方使用该变量作为迭代变量标识符;我使用这种方法构建 DOM 节点,创建动态构建的 HTML 表。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2021-08-11
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-03-06
              • 2019-06-14
              • 2014-05-20
              相关资源
              最近更新 更多