如何遍历字符串并将字符推入对象

时间:2020-10-02 15:10:11

标签: javascript

我正在尝试创建一个函数,在该函数中我接受包含元音的字符串并对其进行迭代,然后将元音推入对象中。我正在使用forEach循环(我不能使用任何其他类型的循环)遍历每个字符以检查字母并查看其是否为元音,如果是,我将元音字符设置为等于对象键和数字元音出现的次数将是该值。到目前为止,这是我的代码:

function vowelCount(str) {
  let obj = {}
  str.split(' ')
  str.forEach(function(val) {
    obj.val = 'hi'
    
  })
  return obj
}

我知道还需要做很多工作,但是我不确定如何将键设置为与元音和出现次数相等的值。

3 个答案:

答案 0 :(得分:2)

function vowelCount(str) {
  const vowels = { a: 0, e: 0, i: 0, o: 0, u: 0 };

  str.split('').forEach((ch) => {
    if (vowels[ch]) {
      vowelCount++;
    }
  });

  return vowels;
}

如果需要,可以始终过滤值以排除零计数。 并且不要害怕其他用于迭代的函数,例如:

const vowelCount = (str = '') =>
  str.split('').reduce(
    (vowels, ch) => {
      if (vowels[ch]) {
        vowels[ch]++;
      }
      return vowels;
    },
    { a: 0, e: 0, i: 0, o: 0, u: 0 }
  );

答案 1 :(得分:1)

obj.val正在访问val的属性obj,因此要动态访问它,它应该是obj[val]

function isVowel(char) {
  return "aeiou".includes(char)
}

function vowelCount(str) {
  let obj = {}
  str.split("").forEach(function (val) {
    if (isVowel(val)) {
      obj[val] = (obj[val] || 0) + 1
    }
  })
  return obj
}

console.log(vowelCount("aeiouaeiouaaaii"))

答案 2 :(得分:1)

您可以创建所有元音的元音集,然后遍历提供的字符串str并基于obj对象中的现有计数添加计数:

function vowelCount(str) {
  let obj = {}
  const chars = str.toLocaleLowerCase().split('');
  const vowels = new Set(["a", "e", "i", "o", "u"]);
  chars.forEach(c => {
    if (vowels.has(c)) {
      obj[c] = (obj[c] || 0) + 1;
    }
  });
  return obj
}
console.log(vowelCount("Hello World! this is a function to count vowels"));