我正在edabit上解决一些JS问题,与此同时也遇到了一些问题。该任务要求我们创建一个函数,该函数以字符串形式返回哈希值和加号的数目,并以数组形式返回答案。如果给定一个空字符串,它将返回[0,0]。下面的示例。
hashPlusCount("###+") ➞ [3, 1]
hashPlusCount("##+++#") ➞ [3, 3]
hashPlusCount("#+++#+#++#") ➞ [4, 6]
hashPlusCount("") ➞ [0, 0]
这是我使用正则表达式得出的代码。
const hashPlusCount = str =>
str === "" ? [0,0] :
[str.match(/\#/gi).length,
str.match(/\+/gi).length];
该代码在repl.it和外部编辑器上均可正常运行。它甚至可以在edabit本身的代码操场上运行!但是在质询页面上,它返回“无法读取null的属性'length' 在hashPlusCount”。
对于解决此问题并帮助我了解正在发生的事情的任何帮助,都表示赞赏。
答案 0 :(得分:4)
您需要将空搜索移到返回数组的内部。
const hashPlusCount = str => [
(str.match(/\#/gi) || '').length,
(str.match(/\+/gi) || '').length
];
答案 1 :(得分:0)
另一种方法是使用 Array.from() 将字符串转换为数组。Array.from() 静态方法从类数组或可迭代对象创建一个新的、浅复制的 Array 实例。
然后,创建变量 numberofDash 和 numberofPlush 来计算破折号和加号的数量。然后使用 forEach() 计算破折号和加号的数量。
function hashPlusCount(str) {
let numberofDash = 0,
numberofPlus = 0;
Array.from(str).forEach(function (ch) {
if (ch === "#") {
numberofDash++;
}
if (ch === "+") {
numberofPlus++;
}
});
return [numberofDash, numberofPlus];
}
console.log(hashPlusCount("###+"));
console.log(hashPlusCount("##+++#"));
console.log(hashPlusCount("#+++#+#++#"));
console.log(hashPlusCount(""));