我正在尝试用JavaScript解决此问题,但是很难做到这一点。
假设某人说了一条消息,例如"yeah"
,我需要返回,"yyeeaahh"
或者每个字符在原始字符串中的出现频率是否不均匀:
"yyeaaahhh"
然后我的函数应该返回:
"yyyeeaaaahhhh"
我的方法如下:
我首先将字符串变成了其中Array
的一个字符。
获得数组后,我决定创建一个具有键值对的JavaScript对象,其中键是字母,值是字母在字符串中出现的次数。
然后,我了解了该Object.entries()
方法,该方法使我可以将这些键值对的数组作为数组。
我遇到的困难是如何将该数组映射到一个新的数组,该数组包含键显示的(value + 1)
时间,其中value是键在原始字符串中的对应频率。
在更直观的上下文中,我想从这里转到:
[['y', 2], ['e', 3], ['a', 3], ['h', 2]] => ['yyy', 'eeee', 'aaaa', 'hhh']
在此之后,我认为可以将其琐碎地重新连接array
到a中string
以得到最终的字符串。
到目前为止,这是我的代码:
function newString(string) {
const strArr = string.split('')
var counts = {};
for (var i = 0; i < strArr.length; i++) {
if ((string.match(new RegExp(strArr[i], "g"))).length >= 1) {
counts[string[i]] = (string.match(new RegExp(string[i], "g"))).length;
}
}
var countArr = Object.entries(counts)
var newStrArr = []
for(const [key,value] in countArr) {
newStrArr.push(key.repeat(value + 1))
}
return newStrArr
}
[['y', 2], ['e', 3], ['a', 3], ['h', 2]] => ['yyy', 'eeee', 'aaaa', 'hhh']
只需创建一个字符串变量并进行连接即可。循环遍历创建的数组,并获取当前字母和当前字母的频率。然后创建另一个循环,以将字母添加到字符串频率+1倍。
var str = '';
for (var i = 0; i < newStrArr.length; i++) {
var letter = newStrArr[i][0];
var freq = newStrArr[i][1];
for (var j = 0; j < freq + 1; j++) {
str += letter;
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句