简单的JavaScript回调混淆

时间:2019-02-28 00:23:28

标签: javascript

我只是进入javascript回调,试图实现一个简单的元音计数功能。这就是我所拥有的,但是我无法弄清楚此回调在语法上有什么问题。我敢肯定这是一个非常明显的错误,但是如果有人能启发我,那就太好了。

function isitVowel(letter){
   return letter in ['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'];
}

function countVowels(line){
   return line.split(",").filter(isitVowel).length;
}

countVowels("a,b,c,d,e");

4 个答案:

答案 0 :(得分:4)

我认为您没有正确使用the in operator。看起来更像您要使用check if the value is in the arraythe includes function

function isitVowel(letter){
    return ['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'].includes(letter);
}

注意:检查浏览器的兼容性。您可能需要包括IE的polyfill。

还请注意:这实际上不是您正在使用的“回调”。您只是将一个函数引用作为参数传递给另一个函数。 “回调”是完成异步操作后传递使用的函数。

答案 1 :(得分:1)

您的问题是基于对in的误解。 in在对象内寻找键,而不是数组中的值。

相反,您需要使用Array.prototype.includes(),或者,对于较旧的浏览器支持,请使用Array.prototype.indexOf()

return myarray.includes(letter);

return myarray.indexOf(letter) != -1; //-1 means not found

...其中myarray是您的字母数组。

答案 2 :(得分:0)

您检查字母是否在数组内不起作用,回调应该没问题。 您可以使用

return ['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'].includes(letter)

代替

答案 3 :(得分:0)

Map()

以下演示使用:

  • df.loc[:,'A'] = ((df['A'] * df['B']) + (df['C'] * df['D'])) / (df['B'] + df['D']) 存储元音

  • .split('')将字符串输入分成字母数组。

  • .forEach()遍历输入字符串。

  • 在每次迭代中使用
  • Map()方法.has().get().set()比较和存储匹配项。

  • Array.from()用于将Map()转换为2D数组。


演示

Map()