【问题标题】:Javascript: Write a function that takes in a number, and returns an array with that number in it that many timesJavascript:编写一个接收数字的函数,并多次返回一个包含该数字的数组
【发布时间】:2016-04-11 20:36:29
【问题描述】:

我是编程和数学概念的新手(在大学里修过数学 101),所以我正在努力解决这个问题:

编写一个接收数字的函数,并多次返回包含该数字的数组。

这是我目前得到的代码:

    function numReturn(x) {
         var newArray = [];
         if (typeof x === "number") {
             return newArray.push[x]* x;
         } else {
             return null;
         }
     }

这是我的思考过程:

  1. 创建一个可以接受数字 x 的函数。
  2. 在该函数中,创建一个空白数组,以便稍后将值推送给它。
  3. 检查为 x 输入的 typeof 值是否为数字。如果是,则将其返回到空白数组的末尾。否则,返回null

当我将它放入 Javascript 控制台并插入一个值时,它返回未定义。有没有人指点一下?

【问题讨论】:

    标签: javascript arrays numbers push


    【解决方案1】:
    function a(i) {
        var a = new Array(i);
        return a.fill(i);
    }
    

    return new Array(i).fill(i);,简称。测试:

    a(4)
    // --> [4, 4, 4, 4]
    

    Array.prototype.fill() 是一种 ES6 方法,尚未普遍实现。 Chrome 和 Firefox 有它,IE 没有 - 但是有一个 polyfill 可用。

    比较:http://kangax.github.io/compat-table/es6/#test-Array.prototype_methods_Array.prototype.fill

    【讨论】:

      【解决方案2】:

      为了做某事任意次数,使用循环。有几个循环,但这里for 循环是最合适的。

      for 循环具有以下结构:

      for(var i = 0; i < x; i++) {
          // ^initializer
          //         ^condition
          //                ^increment
          //body
      }
      

      初始化器是进入循环的第一件事。在这种情况下,这意味着名为i 的变量被设置为0。然后检查条件x。如果条件i &lt; x 成立,则执行循环:执行主体。执行完body后,进行自增(这里i++),然后重新检查条件,如果条件仍然成立,则再次执行循环,以此类推。

      您可以按如下方式应用此概念:

      function numReturn(x) {
          var newArray = [];
          if (typeof x === "number") {
              for(var i = 0; i < x; i++) {
                  newArray.push(x);
              }
              return newArray;
          } else {
              return null;
          }
      }
      

      【讨论】:

      • 谢谢先生的解释。我现在知道循环的工作原理是通过在数组中推送 x" 来检查 x 和 0 之间的数字,即 x。
      【解决方案3】:

      这个:newArray.push[x]* x 不会推送 x 次。 * 运算符只是将数字相乘,总是且仅。你想推送 x 次,所以使用 for 像这样:

      for (var i = 0; i < x; i++ )
            newArray.push(x);
      

      然后返回newArray

      【讨论】:

        【解决方案4】:

        取自Most efficient way to create a zero filled JavaScript array?的回答

        function numReturn(x){
            return Array.apply(null, Array(x)).map(Number.prototype.valueOf,x);
        }
        console.log(numReturn(10)); // [10, 10, 10, 10, 10, 10, 10, 10, 10, 10]
        

        【讨论】:

          【解决方案5】:

          var n = 7
          var result = Array.apply(null, {length: n}).map(function(){return n})
          
          // Demo output
          document.write(JSON.stringify(result))

          作为函数:

          function numReturn(x) {
               if (typeof x === "number") {
                   return Array.apply(null, {length: n}).map(function(){return n})
               } else {
                   return null;
               }
           }
          

          【讨论】:

          • 壮观的单线。不过,我认为 OP 不会从中学到很多东西。
          • @JohnWhite:完全是我的想法。这里一介绍JSON,高阶函数,各种库函数,文档,……这简直是一下子看不懂。这就像给猴子一个打字机,并期待它开始打字莎士比亚。 (此评论无意冒犯任何人)。
          • @WillemVanOnsem 我只想睁开他的眼睛,这样他就可以看到还有更多的方法可以做到这一点。反正循环答案已经发布了。
          • 另外.fill 更适合这个,我学到了一些新东西!
          猜你喜欢
          • 2019-01-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-03-30
          • 2023-01-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多