如何拆分字符串并重复字符? [复制]

Posted

技术标签:

【中文标题】如何拆分字符串并重复字符? [复制]【英文标题】:How to split a string and repeat characters? [duplicate] 【发布时间】:2020-01-19 01:15:57 【问题描述】:

我正在尝试将array = ["A", "B", "C", "D"] 转换为array = ["A", "BB", "CCC", "DDDD"]。如果您比较数组,您会注意到第二个数组中的字母在每个位置都有额外的相同字母。下面是我的代码。我使用了 for 循环,因为我想在 for 循环中使用增量。我什至不知道 map() 方法是否可以做同样的事情,所以我使用了 for 循环。但是,当我检查时,它没有显示我想要的结果。我错过了什么?

function accum(s) 
  // your code
  let accArray = s.toUpperCase().split("");

  for (let i = 1; i < accArray.length; i++) 
    accArray[i].repeat(i + 1);
  

  console.log(accArray);

accum("abcd")

【问题讨论】:

字符串(和所有原语)是不可变的。对于repeatreplace等字符串特殊方法,返回一个new字符串,修改后的值,原字符串保持不变。 @VLAZ 哦,对了!我完全忘记了 repeat 返回一个新字符串。谢谢提醒! @VLAZ 为什么将我的问题标记为重复?我看了另一个问题,它没有回答我的问题。另一个问题是关于 substr() 方法,而我在询问 repeat() 方法和 map() 方法。 字符串是不可变的。任何“更改”字符串的方法实际上都会返回一个新字符串 - repeatreplacesubstrslicetoUpperCase 等等。这些都不会改变调用它们的字符串 - 当答案相同时,无需为这些方法中的每一个写相同的答案 - 你必须调用该方法并在某处分配值。 @VLAZ 确实字符串是不可变的。但是,另一个问题主要是在谈论解决方案和使用 substr()、slice() 等。实际上,另一个问题是一个广泛的问题。您提到的报价只是最佳解决方案中的一段。我的问题很具体,仅限于 map() 和 repeat() 方法。这就是与其他问题的不同之处。 【参考方案1】:

实现所需输出的更简洁的方法是使用Arrow Functions

const accum = (s) => s.toUpperCase()
                      .split("")
                      .map((s, i) => s.repeat(i + 1));
                      
console.log(accum("abcd"));

【讨论】:

【参考方案2】:

String.prototype.repeat()

repeat() 方法构造并返回一个新字符串,其中包含调用它的字符串的指定数量的副本,并连接在一起。

您必须在特定的索引处分配新的返回值:

accArray[i] = accArray[i].repeat(i + 1);

function accum(s) 
  // your code
  let accArray = s.toUpperCase().split("");

  for (let i = 1; i < accArray.length; i++) 
    accArray[i] = accArray[i].repeat(i + 1);
  

  console.log(accArray);

accum("abcd")

【讨论】:

【参考方案3】:

您需要将值推送到数组,或分配回该索引,repeat 不会改变原始值,它会返回一个新字符串 Repeat,因此您需要将其分配回

function accum(s) 
  // your code
  let accArray = s.toUpperCase().split("");
  let op = []
  for (let i = 0; i < accArray.length; i++) 
    op.push(accArray[i].repeat(i + 1));
  

  console.log(op);

accum("abcd")

【讨论】:

我发现 Mamun 的答案更好,原因是该答案利用现有变量而不是创建新变量。 @KrishnaPrashatt 我遵循规则不改变我的变量,除非有需要,所以我使用了不同的变量【参考方案4】:

如果你的输入已经是一个类似的数组

arr = ['a', 'b', 'c', 'd']

那么你可以使用

arr.map((item, idx) => item.repeat(idx+1))

如果你有像

这样的字符串
str = 'abcd'

那么你可以使用:

str.split('').map((item, idx) => item.repeat(idx+1);

【讨论】:

显然你可以在通过上述代码之前对字符串进行大写或小写。【参考方案5】:

您可以使用forEachmap 作为迭代器完美地工作

function accum(s) 
  // your code
  let accArray = s.toUpperCase().split("");
  const arr = [];
  accArray.forEach((e, index) => 
    arr.push(e.repeat(index + 1))
  )

  console.log(arr);

accum("abcd")

【讨论】:

以上是关于如何拆分字符串并重复字符? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何将字符串数组拆分为新的字符串数组并删除重复项

如何拆分JSON字符串[重复]

如何拆分字符串并将其存储在临时变量中[重复]

使用 C++ 拆分字符串 [重复]

如何拆分一列字符串,并从单独的元素创建行? [复制]

拆分分隔字符串并删除转义序列[重复]