【问题标题】:how to convert this C# code snippet to Javascript [duplicate]如何将此 C# 代码片段转换为 Javascript [重复]
【发布时间】:2015-07-02 05:24:31
【问题描述】:

我需要了解 Javascript 如何处理新的字符串对象,就像在下面的 C# 代码中一样

var UpperBound = 14;
for (int i = 0; i < UpperBound; i++) {
    Console.WriteLine(new string('*', i));
  }
Console.ReadLine();

这就是我在 Javascript 中的做法:

var upperBound = 14;
for(var i=0;i<upperBound;i++){
  console.log(new string("*", i));
}

我是编程新手,我从 javascript 开始,所以如果我问这个问题显得愚蠢,请原谅并通过解释来帮助我......谢谢

【问题讨论】:

  • 在 JavaScript w3schools 上做一个简单的谷歌搜索是一个好的开始..
  • Array(i + 1).join( "*" )

标签: javascript c#


【解决方案1】:

在 JS 中没有 new string("*", i) 的等价物。你需要自己重复。

一个方便的技巧是Array(i + 1).join("*"),但我认为它不是很有效,因为它需要构造数组。最好的方法可能是循环和连接。

【讨论】:

    【解决方案2】:

    你的代码很好,除了这部分:

    new string("*", i)
    

    JS 的语法不正确。您需要以另一种方式创建字符串。

    这就是在 JavaScript 中创建带有重复字符的字符串的方式。
    我应该注意到String.prototype.repeat 是 ECMAScript 6 的一部分。

    var upperBound = 14;
    for(var i=0;i<upperBound;i++)
    {
        document.write('*'.repeat(i));
        document.write("<br/>");
    }

    在此之前,您应该使用另一种方法,例如在 for-loop 中手动创建此字符串,如下所示:

    function repeatString(ch, t)
    {
      var res = '';
      for (var i = 0; i < t; i++) res += ch;
      return res;
    }
    
    var upperBound = 14;
    for(var i=0;i<upperBound;i++)
    {
      document.write(repeatString('*', i));
      document.write("<br/>");
    }

    还有其他一些方法和技巧。你可以在上面阅读this StackOverflow topic

    我建议您在尝试编写 JavaScript 之前先阅读一篇很好的 JavaScript 教程。
    C# 和 JavaScript 在所有方面都是非常不同的语言。您不能只使用 C# 代码,更改语法并认为它会起作用。

    【讨论】:

    • 仅来自 ES6。所以还不能接受
    • 请注意,.repeat 是 ES6。 +1 虽然。
    • 谢谢,这真的很有帮助。
    【解决方案3】:

    我想结合两种解决方案,所以(最好的选择是使用es6-shim)这里是一个polyfill(借用自here

    if (!String.prototype.repeat) {
      String.prototype.repeat = function(count) {
        'use strict';
        if (this == null) {
          throw new TypeError('can\'t convert ' + this + ' to object');
        }
        var str = '' + this;
        count = +count;
        if (count != count) {
          count = 0;
        }
        if (count < 0) {
          throw new RangeError('repeat count must be non-negative');
        }
        if (count == Infinity) {
          throw new RangeError('repeat count must be less than infinity');
        }
        count = Math.floor(count);
        if (str.length == 0 || count == 0) {
          return '';
        }
        // Ensuring count is a 31-bit integer allows us to heavily optimize the
        // main part. But anyway, most current (August 2014) browsers can't handle
        // strings 1 << 28 chars or longer, so:
        if (str.length * count >= 1 << 28) {
          throw new RangeError('repeat count must not overflow maximum string size');
        }
        var rpt = '';
        for (;;) {
          if ((count & 1) == 1) {
            rpt += str;
          }
          count >>>= 1;
          if (count == 0) {
            break;
          }
          str += str;
        }
        return rpt;
      }
    }
    

    及用法:

    var upperBound = 14;
    for(var i=0;i<upperBound;i++){
        console.log("*".repeat(i));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多