Items also occurs in a set The task


  You're given strings J representing the types of stones that are
  jewels, and S representing the stones you have.  Each character in S
  is a type of stone you have.  You want to know how many of the stones
  you have are also jewels.
  
  The letters in J are guaranteed distinct, and all characters in J and
  S are letters. Letters are case sensitive, so "a" is considered a
  different type of stone from "A".
  
  Example 1:
  
  Input: J = "aA", S = "aAAbbbb" Output: 3 
  
  Example 2:
  
  Input: J = "z", S = "ZZ" Output: 0 
  
  Note:
  
  S and J will consist of letters and have length at most 50. The
  characters in J are distinct.


My functional solution

const findNumberOfJewels = (j,s) =&gt;  [...s].reduce((num, x) =&gt; [...j].includes(x) ? num + 1 : num , 0);

console.log(findNumberOfJewels("aA", "aAAbbbb"));


My imperative solution

function findNumberOfJewels2(j,s) {
  let res = 0;
  const set = new Set(j);
  for (const x of s) {
    if (set.has(x)) { ++res; }
  }
  return res;
};

console.log(findNumberOfJewels2("aA", "aAAbbbb"));
The functional approach is almost certainly faster despite having worse big-O — \$O(j \cdot s)\$ functional vs \$O(j + s)\$ imperative — because linear searches of small arrays are very fast. 

You don't need to destructure j and adding a boolean to a number coerces the boolean to 0 or 1.  

sum is a better name than num and c is a good name for a character iterator.

const findNumberOfJewels = (j,s) =&gt; [...s].reduce( (sum, c) =&gt; sum + j.includes(c),  0 );