[英]Search string using RegEx for repeated letters and outputting into two-dimensional array in Javascript
我才刚开始使用RegEx。 到目前为止,我有类似的东西,但看来我的模式已关闭。
function hasRepeatedLetters(str) {
var patt = /[a-zA-Z]/g;
var result = patt.exec(str);
return result;
}
console.log(hasRepeatedLetters('aaBcDDbcca'));
我希望能够输入带有字母组合的任何参数,并且输出是一个二维数组,其中第一个值是重复字母,第二个值是重复字母长度。
[[ “一”,3],[ “b” 的,1],[ “B”,1],[ “c” 的,3],[ “d”,2]]
可能的解决方案,使用Array#forEach
函数。
var str = 'aaBcDDbcca'.split(''), obj = {}; str.forEach(v => obj[v] ? obj[v]++ : obj[v] = 1); var res = Object.keys(obj).map(v => [v, obj[v]]); console.log(JSON.stringify(res));
就个人而言,我建议您将其保留为对象。
var str = 'aaBcDDbcca'.split(''), obj = {}; str.forEach(v => obj[v] ? obj[v]++ : obj[v] = 1); console.log(JSON.stringify(obj));
这是基于地图/对象的解决方案
var str = 'aaBcDDbcca';
var map = {}; // create a hash for keys and their counts
// loop over all characters and then add count
Array.from(str).forEach(function(character) {
map[character] = map[character] ? map[character] + 1 : 1;
});
// finally, convert map to a 2D array with 1st item as key and second item as count
var counts = Object.keys(map).map(function(key) {
return [key, map[key]];
})
console.log(counts);
您可以为此使用ES6 Map
,它具有一些不错的功能:
set
方法再次返回地图 function hasRepeatedLetters(str) { return [...[...str].reduce( (acc, c) => acc.set(c, (acc.get(c) || 0) + 1), new Map )]; } console.log(hasRepeatedLetters('aaBcDDbcca'));
.as-console-wrapper { max-height: 100% !important; top: 0; }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.