为了账号安全,请及时绑定邮箱和手机立即绑定

计算 Javascript 中所有字符串字符在字符串中使用字符的次数

计算 Javascript 中所有字符串字符在字符串中使用字符的次数

繁星淼淼 2022-06-09 19:04:53
编写一个名为 strLetterCount 的函数,它接受一个字符串并返回一个新字符串,每个字符后跟它在字符串中出现的次数。例如:strLetterCount("taco"); // "t1a1c1o1"我的代码在这里偏离了标记,但这就是我得到的......我将继续寻找每个字母,然后尝试返回正确的字符串。我知道这不是解决问题的好方法。有什么帮助吗?function strLetterCount(str) {  var countA = 0;  var countB = 0;  var countC = 0;  var countD = 0;  var countE = 0;  var countF = 0;  var countG = 0;  var countH = 0;  var countI = 0;  var countJ = 0;  var countK = 0;  var countL = 0;  var countM = 0;  var countN = 0;  var countO = 0;  var countP = 0;  var countQ = 0;  var countR = 0;  var countS = 0;  var countT = 0;  var countU = 0;  var countV = 0;  var countW = 0;  var countX = 0;  var countY = 0;  var countZ = 0;  for (var i = 0; i < str.length; i++);  if (str[i] === 'a') {    countA++;  }  for (var i = 0; i < str.length; i++);  if (str[i] === 'b') {    countB++;  }  for (var i = 0; i < str.length; i++);  if (str[i] === 'c') {    countC++;  }  return {"a":countA,"b":countB,"c":countC}}console.log(  strLetterCount("The quick brown fox jumps over the lazy dog"))  
查看完整描述

3 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

只需遍历字符串的每个字符,并将它们计数到一个对象中。


一个简单的解决方案是:


let str = "The quick brown fox jumps over the lazy dog";


const count = string => {

  const characters = {};

  for (let character of string) {

    characters[character] = characters[character] + 1 || 1;

  }

  return characters;

}


console.log(count(str));


您可以将结果用作:


let result = count(str);

console.log(result["o"]); // 4

更新


如果您需要字符串输出,一种选择是使用第二个循环来写出结果:

let str = "The quick brown fox jumps over the lazy dog";


const count = string => {

  const characters = {};

  let str = "";

  

  for (let character of string) {

    characters[character] = characters[character] + 1 || 1;

  }

  for (let key in characters) {

    str += `${key}${characters[key]}`

  }

  return str;

}


console.log(count(str));


或者,如果您只是简单地不关心格式:


return JSON.stringify(characters);


查看完整回答
反对 回复 2022-06-09
?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

我认为最简单和最易读的


const countChars = str => {

  const chars = {};                  // create a counter object

  const arr = str.split("");         // make an array from the characters

  arr.forEach(char => chars[char] = ++chars[char] || 1) // add counters to counter object


  return arr                         // return the array but first

    .map(char => char + chars[char]) // map to counters

    .join("");                       // and then join to string

}


console.log(countChars("Now is the time"));


按第一次出现的顺序减少到只是 char + number


const countChars = str => {

  const chars = {};                  // create a counter object

  const arr = str.split("");         // make an array from the characters

  arr.forEach(char => chars[char] = ++chars[char] || 1) // add counters to counter object

  return Object.keys(chars)          // return the chars

    .map(char => char + chars[char]) // concatenated with counters

    .join("");                       // and then join to string

}

console.log(countChars("woof the looping loop"));


查看完整回答
反对 回复 2022-06-09
?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

Object.entries()您可以使用,reduce()和flat()方法尝试此操作:


function strLetterCount(str) {

  return Object.entries([...str].reduce(function(ac, s) {

    ac[s] = ++ac[s] || 1

    return ac;

  }, {})).flat().join('')

}


console.log(strLetterCount("taco"))

console.log(strLetterCount("chocotaco"))

解释:

  1. 使用[...str]我们首先将字符串转换为数组。

  2. 然后使用.reduce()我们试图将每个字符串元素的计数和存储到一个对象中,例如:

    {t: 1, a: 1, c: 1, o: 1}
  3. 然后使用Object.entries()我们得到如下数据:

    [["t", 1], ["a", 1], ["c", 1], ["o", 1]]
  4. 最后使用flat()&join()我们得到所需的输出格式为字符串t1a1c1o1


查看完整回答
反对 回复 2022-06-09
  • 3 回答
  • 0 关注
  • 173 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号