'I do not understand how this JS code is working; how are these two lines being returned?

let specificSuffix = function(words, suffix) {
  if (!Array.isArray(words)) {
    return [];
  }
  return words.filter(function(word) {
    return word.endsWith(suffix)
  });
}

console.log(specificSuffix(['family', 'hound', 'catalyst', 'fly', 'timidly', 'bond'], 'ly'));
// [ 'family', 'fly', 'timidly' ]
console.log(specificSuffix(['simplicity', 'computer', 'felicity'], 'ily'));
// [ ]

I'm confused specifically about:

return words.filter(function(word) {
  return word.endsWith(suffix)
});

How am I returning both of these things? The filter is saying, return this empty new array, fill it with the words that endWith the suffix... (I think)

It's really just the two returns that are throwing me. How does this work?



Solution 1:[1]

Perhaps if we extract the variable result the code will make more sense?

const specificSuffix = function(words, suffix) {
  if (!Array.isArray(words)) return [];

  const result = words.filter(function(word) {
    return word.endsWith(suffix)
  });

  return result;
};

Solution 2:[2]

return words.filter(function(word){
 return word.endsWith(suffix)
  });

The outer return returns the result of words.filter(). Inside the filter() function we have to pass a callback. So the return inside is for that callback. In short you have to return true/false, based on a condition inside the filter callback.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 A1exandr Belan
Solution 2 Tushar Shahi