【问题标题】:can a array be stored in a function in javascript?数组可以存储在javascript中的函数中吗?
【发布时间】:2018-08-11 04:08:08
【问题描述】:

我很好奇,数组可以存储在函数中吗?当我在我的函数中声明一个数组时。由于无法读取该值而出错,一旦我将其从函数中取出,则可以读取该值。

function decades(e) {
  var decadesArray = ["one decade",
  "two decades",
  "three decades",
  "four decades",
  "five decades",
  "six decades",
  "seven decades",
  "eight decades",
  "nine decades",
  "millennium"];

  for( var i = 0; i <= 100; i++) {
    if (i % 10 == 0) {
      console.log("decadesArray[0]");
    }
  }
}

十年(i);

【问题讨论】:

  • 它可以通过几种方式,你能详细说明、分享你的代码、解释你想要做什么吗?
  • 取决于存储的含义。如果你的意思是它是一个活的对象,一旦函数退出就可以改变,那么不会(除非它是基于外部源创建的),那么每次运行函数时都会重新创建数组。此外,如果您在异步回调中创建一个数组,如果您尝试访问的代码不是回调过程的一部分,您将无法访问其设置值。
  • 当然我发布了代码,我还是 javascript 新手。我正在努力思考如何做到这一点。我基本上想循环1-100。每“十年”打印 1-9 个十年,第 10 个是千年。我认为能够动态打印这些字符串的最佳方法是将它们存储在一个数组中,然后在打印“十年”时将它们取出。
  • 您能否显示产生错误的实际代码 - 包括调用函数的代码和错误消息本身
  • 我在 console.logged 十年数组时发现该函数接受了数组,但现在它返回为未定义。

标签: javascript arrays function


【解决方案1】:

您要做的是在 if 语句中将 shift/splice 每次 if 语句为真时从数组元素之一中删除。在您的情况下,您每次都会移动第一个数组元素。

function decades(e) {
  var decadesArray = ["one decade",
  "two decades",
  "three decades",
  "four decades",
  "five decades",
  "six decades",
  "seven decades",
  "eight decades",
  "nine decades",
  "millenium"];

  for( var i = 0; i <= 100; i++) {
    console.log("Year: ",i);
    //check if i is greater than 0
    //otherwise when i is 0 will be considered
    //the first decade
    if (i % 10 == 0 && i>0) {
      console.log( decadesArray.shift(), i );
    }
  }
}
decades();console.log( decadesArray[i/10] || i );

如果您不想实际提取数组的每个元素,您可以使用(i-10)/10 作为数组的索引并将其打印出来,如果该索引最终为undefined,则只需打印数字.

function decades(e) {
  var decadesArray = ["one decade",
  "two decades",
  "three decades",
  "four decades",
  "five decades",
  "six decades",
  "seven decades",
  "eight decades",
  "nine decades",
  "millenium"];

  for( var i = 0; i <= 100; i++) {
    console.log( decadesArray[(i-10)/10] || i );
  }
}
decades();

【讨论】:

  • 这真的很接近我想要做的事情,但我希望它通过所有的数字。所以我可以看到 1-100,每 10 的倍数打印出“十年”
  • @Ilyris 然后将console.log() 放在打印数字的 if 之外(请参阅编辑)。请注意,sn-p 中的日志视图是有限的,因此请在实际的浏览器控制台中查看完整输出
  • 哦!好的!最后,我只需要想办法换掉那一年:10 换 10 年。和年份:20 表示两个十年。不过,我会尝试弄清楚:D 所以,要打印剩余的数字,console.log(i) 必须在条件语句之前?
  • 它可以在之前或之后,它不能在 if 语句中,因为 if 语句告诉限制该部分被调用的次数。
  • (i-10)/10] || i -> 所以这让我很困惑,我不知道我是否完全理解这个......这是 i 减去 10 除以 10 还是 i?
【解决方案2】:

这是你想要做的吗?如果不是,请尝试更清楚。

请注意,在 StackOverflow sn-p 控制台中。显示的最大行数是有限的。这就是为什么输出似乎以 50 个数字开头的原因。

function decades() {
  var decadesArray = ["one decade",
  "two decades",
  "three decades",
  "four decades",
  "five decades",
  "six decades",
  "seven decades",
  "eight decades",
  "nine decades",
  "millennium"];

  for( var i = 0; i <= 100; i++) {
    if (i % 10 == 0 && i > 0) {
      console.log(decadesArray[Math.trunc(i/10)-1]);
    } else {
      console.log(`Year: ${i}`)
    }
  }
}
decades();

【讨论】:

  • 这也是我试图做的完全相同的事情,只是编码有点不同。仍然有助于让我了解不同的做事方式。谢谢
【解决方案3】:

另一种反转循环的方法。循环数十年数组并在其中循环 10 次。在数组上使用slice() 允许传递 1-10 个十年来显示

function decades(e=10) {
  var decadesArray = ["one decade",
    "two decades",
    "three decades",
    "four decades",
    "five decades",
    "six decades",
    "seven decades",
    "eight decades",
    "nine decades",
    "millennium"
  ];
  decadesArray.slice(0,e).forEach(function(text, di) {
    var start = di * 10 + 1;
    for (var i = start; i < start + 10; i++) {      
        console.log('year: ', i)
    }
    console.log(text);
  });
}

decades()

【讨论】:

    【解决方案4】:

    Javascript函数只有在被调用时才会初始化,函数内部的所有私有变量只会在那个时候被激活。

    您需要在函数外部分配变量以将存储的分配值保留在变量中。

    var decadesArray = ["one decade",
      "two decades",
      "three decades",
      "four decades",
      "five decades",
      "six decades",
      "seven decades",
      "eight decades",
      "nine decades",
      "millenium"
    ];
    
    decades(0);
    
    function decades(e) {
    
      decadesArray.push("New value stored 1");
      decadesArray.push("New value stored 2");
      decadesArray.push("New value stored 3");
    
    
      for (var i = 0; i < decadesArray.length; i++) {
        console.log(decadesArray[i]);
        document.getElementById('logVw').innerHTML += decadesArray[i] + '<br>';
      }
    }
    <div id='logVw'>
    </div>

    【讨论】:

      猜你喜欢
      • 2011-04-05
      • 2010-12-02
      • 1970-01-01
      • 2016-04-18
      • 1970-01-01
      • 2020-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多