我正在尝试编写一个函数,用于计算字母表中字母与字符串中字母的匹配。然后我将每个字母的计数存储到一个关联数组中。
我的问题是string.match(regExpression) || [].length
正在返回一个数组。我的期望是它会返回一个与匹配长度相匹配的整数值。我知道string.prototype.match()方法返回一个数组,但我的理解(基于方法的形式描述)是Sting.length返回一个数字。
我做错了什么?
function countLetters(string) {
//create array with letters of alphabet
var alphabet = "abcdefghijklmnopqrstuvwxyz".split("");
var counts = [];
for (i = 0; i < alphabet.length; i++) {
var regExpression = new RegExp(alphabet[i], "g");
counts[alphabet[i]] = string.match(regExpression) || [].length
}
return counts;
}
答案 0 :(得分:2)
我意识到自己的错误。行string.match(regExpression) || [].length
行为意外,因为我在调用length
方法之前缺少匹配方法和逻辑运算符周围的括号。我正在返回数组或空数组的长度。
我还将counts
更改为对象。
这是固定功能:
function countLetters(string) {
//declare array with letters of alphabet
var alphabet = "abcdefghijklmnopqrstuvwxyz".split("");
//declare object which will store our counts
var counts = {};
//iterate through alphabet array, find matches, and assign count of matches to counts object
for (i = 0; i < alphabet.length; i++) {
var regExpression = new RegExp(alphabet[i], "g");
counts[alphabet[i]] = (string.match(regExpression) || []).length
}
return counts;
}
答案 1 :(得分:0)
你没有做错任何事,但是你期望错误的值,在这种情况下,当string.match是正确的时候,它将返回一个正确行为的数组。
此方法用于在将字符串与正则表达式匹配时检索匹配项,以及在数组中返回的匹配项
答案 2 :(得分:0)
我正在投票给OP自己的答案,因为他已经发现了我要指出的两个问题,即缺少括号和错误的数据类型。然而,因为我已经编写了代码,我还是会发布的。
var data = 'However beautiful the strategy, you should occasionally look at the results.'; //Winston Churchill
// returns an array
function method_A(phrase) {
var o = [], r;
'abcdefghijklmnopqrstuvwxyz'.split('').forEach(function(s, i) {
r = new RegExp(s, 'gi');
o[i] = (phrase.match(r) || []).length;
});
return o;
}
// returns an object
function method_B(phrase) {
var o = {}, r;
'abcdefghijklmnopqrstuvwxyz'.split('').forEach(function(s, i) {
r = new RegExp(s, 'gi');
o[s] = (phrase.match(r) || []).length;
});
return o;
}
stdout.innerHTML = (
'input: ' + data + '\n' +
'method_A: ' + JSON.stringify(method_A(data), false, '') + '\n' +
'method_B: \n' + JSON.stringify(method_B(data), false, ' ')
);
<xmp id="stdout"></xmp>