循环字符串并使用重复方法

时间:2017-10-23 14:22:03

标签: javascript

我正在尝试解决这个练习,目标是给我一个必须转换成另一个字符串的字符串。新字符串的字符将重复,如下例所示。

实施例: accum("abcd"); // "A-Bb-Ccc-Dddd"

我写了以下代码:

function accum(s) {
  counter = 0;
  for (var i = 0; i < s.length; i++) {
    return s[i].toUpperCase() + s[i].repeat(counter) + "-";
    counter += 1;
  }
}

当我尝试运行ZpglnRxqenU等示例测试时,我收到此错误:

  

预期:'Z-Pp-Ggg-Llll-Nnnnn-Rrrrrr-Xxxxxxx-Qqqqqqqq-Eeeeeeeee-Nnnnnnnnnn-Uuuuuuuuuu',而得到:'Z-'。

显然问题与循环无关,但我无法弄清楚原因。

5 个答案:

答案 0 :(得分:3)

这是ES6单行:

const accum = word => word.toLowerCase().split("").map( (letter,index) => letter.toUpperCase() + letter.repeat(index) ).join("-")
  
console.log( accum("ZpglnRxqenU") )

说明:

  • word.split("")首先将字符串分解为字母数组
  • .map( (letter,index) =>迭代每个字母,随时跟踪索引
  • letter.toUpperCase() + letter.repeat(index)将每个字母替换为您返回的转换后的值
  • 此时,您有一组转换值
  • .join("-")将所有内容连接回字符串,并以“ - ”作为分隔符。

答案 1 :(得分:2)

您可以结合使用这些方法:String.prototype.split()Array.prototype.map()Array.prototype.join()

&#13;
&#13;
function accum(s) {
  return s
    .split('')
    .map(function (e, i) {
      return e.toUpperCase() + e.repeat(i);
    })
    .join('-');
}

console.log(accum('ZpglnRxqenU'));
&#13;
&#13;
&#13;

ES6:

&#13;
&#13;
const accum = s => s.split('').map((e, i) => e.toUpperCase() + e.repeat(i)).join('-');

console.log(accum('ZpglnRxqenU'));
&#13;
&#13;
&#13;

答案 2 :(得分:1)

你可以这样做:

function accum(s) {
  s = s.toLowerCase();
  const letters = [];
  
  for (let i = 0; i < s.length; i++) {
    letters.push(s[i].toUpperCase() + s[i].repeat(i));
  }
  
  return letters.join('-');
}

console.log(accum('ZpglnRxqenU'));

你有一个数组,并用字母填充它,一旦填充,你加入元素' - '。您可以将字母添加到字符串中,但最后您必须修剪尾随的“ - ”,这没有错,但现在您有2种方法可以执行此操作。

此外,您不需要counter变量,因为i已经在计算。

答案 3 :(得分:0)

这对你有用。当t循环停止时。你需要删除它。

return

答案 4 :(得分:0)

使用array.reduce:

&#13;
&#13;
var str = "abcd";
function accum(str) {
    var arr = str.split("");
    return arr.reduce((m, o, i) => {
        m += (i === 0 ? "" : "-") + o.toUpperCase() ;
        for (var k = 0; k < i; k++) {
            m += o;
        }
        return m;
    }, "");
}

var ret = accum(str);
console.log(ret);
&#13;
&#13;
&#13;