【问题标题】:How to take array of numbers as input in Javascript? [duplicate]如何在Javascript中将数字数组作为输入? [复制]
【发布时间】:2020-12-12 16:03:21
【问题描述】:
"use strict";

let arr = readline().split(" "); // suppose inputs are 1 2 3 4 5

let res=0;

for(let i=0; i<arr.length; i++){
    res += arr[i];
}

print(res); // output 012345

我知道我是否遍历所有数组元素并将它们转换为数字,例如 arr[index] = Number(arr[index]);那么我可以摆脱这种串联并得到纯和。

但是有没有什么办法可以将Strings的所有这些数组元素直接转换为Number呢?没有任何迭代?

【问题讨论】:

  • "但是有没有什么办法可以直接将Strings的所有这些数组元素转换为Number?不进行任何迭代?" - 计算上,不,那是不可能的。
  • 另外,比起new NumberNumber,更喜欢parseInt( str, 10 )stackoverflow.com/questions/4090518/…(请记住始终使用parseInt 指定基数)。
  • 我对你问题的最后一部分有点困惑——你所说的“在 V8 引擎上”到底是什么意思?
  • 这与 V8 有什么特别的关系? -- 我删除了引用和标签。仅当问题中存在与 V8 相关的内容时才应使用
  • @trincot 我假设他们知道他们只使用 V8,因此可以使用 Web 浏览器上下文中通常不可用的 V8 特定语言扩展和库功能。

标签: javascript arrays iteration


【解决方案1】:

使用Array.reduce:

let arr = readline().split(" "); // suppose inputs are 1 2 3 4 5

let res=arr.reduce((acc,e) => +e + acc,0);

【讨论】:

    【解决方案2】:

    “但是有什么办法可以把Strings的这些数组元素都直接转换成Number呢?

    在计算上,没有。这不可能。 迭代必须发生。否则,这就像是在问如何不用旅行就能拜访地球上的每一个人。

    但是如果你想通过函数式编程来简化你的代码,那么请使用Array.prototype.map:

    const arrayOfInts = readLine().split( ' ' ).map( e => parseInt( e, 10 ) );
    

    通过执行sumArray.prototype.reduce 来更进一步(还添加filter 以排除NaN 值,这会破坏求和运算):

    我已经在每一行记录了每个链接函数的返回值的数据类型:

    const sum = readLine()                    // string
        .split( ' ' )                         // string[]
        .map( e => parseInt( e, 10 ) )        // ( number | NaN )[]
        .filter( n => !isNaN( n ) )           // number[]
        .reduce( ( acc, n ) => acc + n );     // number
    

    【讨论】:

      【解决方案3】:

      如果不对其进行迭代,您将无法做到这一点。但是,您已经遍历了数组,所以...

      只需在添加它们的循环中转换它们

      "use strict";
      
      let arr = readline().split(" "); // suppose inputs are 1 2 3 4 5
      
      let res=0;
      
      for(let i=0; i<arr.length; i++){
          res += Number(arr[i]);
      }
      
      print(res); // output 15
      

      【讨论】:

      • 我担心res += +arr[i]; 对于随便浏览代码的人来说过于微妙(而且看起来像是错字)。
      • 您可以在此处添加评论...
      • 是的,但是编写好的软件代码就像在讲笑话:如果你必须解释它,那就糟糕了。
      • res += Number(arr[i])?
      • parseInt(带有明确的基数)应该优先于Number()stackoverflow.com/questions/4090518/…
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-06
      • 2021-11-01
      • 2016-03-02
      • 2020-02-17
      • 2018-09-14
      • 1970-01-01
      • 2022-08-05
      相关资源
      最近更新 更多