如何拆分字符串并重复字符? [复制]
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")
【问题讨论】:
字符串(和所有原语)是不可变的。对于repeat
和replace
等字符串特殊方法,返回一个new字符串,修改后的值,原字符串保持不变。
@VLAZ 哦,对了!我完全忘记了 repeat
返回一个新字符串。谢谢提醒!
@VLAZ 为什么将我的问题标记为重复?我看了另一个问题,它没有回答我的问题。另一个问题是关于 substr() 方法,而我在询问 repeat() 方法和 map() 方法。
字符串是不可变的。任何“更改”字符串的方法实际上都会返回一个新字符串 - repeat
、replace
、substr
、slice
、toUpperCase
等等。这些都不会改变调用它们的字符串 - 当答案相同时,无需为这些方法中的每一个写相同的答案 - 你必须调用该方法并在某处分配值。
@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】:您可以使用forEach
或map
作为迭代器完美地工作
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")
【讨论】:
以上是关于如何拆分字符串并重复字符? [复制]的主要内容,如果未能解决你的问题,请参考以下文章