返回JavaScript字符串中的哈希和加号的数量

时间:2019-06-29 21:44:37

标签: javascript regex

我正在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”。

对于解决此问题并帮助我了解正在发生的事情的任何帮助,都表示赞赏。

2 个答案:

答案 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(""));