【问题标题】:Fill empty array填充空数组
【发布时间】:2014-04-29 09:03:13
【问题描述】:

我需要从 0 迭代到 30,但我想在 forEach 的帮助下做到这一点:

new Array(30).forEach(console.log.bind(console);

这当然行不通,所以我这样做:

new Array(30).join(',').split(',').forEach(console.log.bind(console));

还有其他方法可以填充空数组吗?

【问题讨论】:

  • 使用 for 循环代替。

标签: javascript loops foreach


【解决方案1】:

其实有一种简单的方法可以创建[0..N)(即不包括N)范围:

var range0toN = Object.keys(Array.apply(0,Array(N)));

显然Object.keys 如果您只想获得 N 个元素的适当数组,则可以删除部分。

不过,正如其他人所说,在这种特殊情况下,使用 for 循环可能会更好。

【讨论】:

    【解决方案2】:

    您可以尝试使用 for 循环。 new Array 不是最佳实践

        var index,      // we use that in the for loop
            counter,    // number of elements in array
            myArray;    // the array you want to fill
    
        counter = 30;
        myArray = [];
    
        for (index = 0; index < counter; index += 1) {
    
            myArray[index] = [];
            /* 
            // alternative:
            myArray.push([]);
            // one-liner
            for (index = 0; index < counter; index += 1) myArray.push([]);
            */
        }
    

    【讨论】:

      【解决方案3】:

      如果你只是想迭代,那么像这样使用for循环

      for (var i = 0; i < 30; i += 1) {
          ...
          ...
      }
      

      实际上,如果您正在寻找一种方法来创建一系列数字,那么您可以这样做

      console.log(Array.apply(null, {length: 30}).map(Number.call, Number));
      

      它将创建从 0 到 29 的数字。来源:Creating range in JavaScript - strange syntax

      【讨论】:

      • 哈哈 =) 我知道常见的 for/white,但我更喜欢使用 forEach——它提供了最好的代码封装(速度并不重要)
      • @3y3 你到底想做什么?输出应该是什么?
      • @3y3 更新后的答案对您来说还不错吗?这是一个巧妙的 hack ;-)
      • 基于@raina77ow 的回答我可以提议console.log(Array.apply(null, new Array(30)).map(Number.call, Number));。长度技巧也很有趣。谢谢。
      • @3y3 阅读链接的问题以更深入地了解其工作原理。我必须说,它真的很值得一读:-)
      【解决方案4】:

      如果您希望所有项目都具有相同的值,请执行此操作

      var arrLength = 4
      var arrVal = 0
      
      var newArr = [...new Array(arrLength)].map(x => arrVal);
      // result will be [0, 0, 0, 0]
      

      【讨论】:

        【解决方案5】:

        如果你坚持foreach

        var data = [1, 2, 3];
        data.forEach(function(x) {
            console.log(x);
        });
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-02-13
          • 1970-01-01
          • 2016-12-04
          • 1970-01-01
          • 1970-01-01
          • 2020-11-24
          相关资源
          最近更新 更多