JavaScript Encuentra la palabra más corta en una cadena

let str = 'Sleep is critical for good health. Not getting enough sleep can lead \
to diminished brain performance and, in the long term, greater risk of \
health conditions. These include heart disease, stroke, and diabetes';

function findWordsByLen(str, len) {
  const punctuationReg = /[.:;,?!"`~[\]{}()<>/@#$%^&*=+_-]/g;
  const words = str
	.replaceAll(/\s{2,}/g, ' ')
	.replaceAll(punctuationReg, '')
	.split(' ');

  let wordsByLen = words.reduce((acc, word) => {
    let wordLen = word.length;
    if (!acc.has(wordLen)) acc.set(wordLen, new Set());
    acc.get(wordLen).add(word);
    return acc;
  }, new Map());

  const maxLen = Math.max(...wordsByLen.keys());
  const minLen = Math.min(...wordsByLen.keys());

  switch(len) {
  case 'all':
    return wordsByLen;
  case 'max':
    return wordsByLen.get(maxLen);
  case 'min':
    return wordsByLen.get(minLen);
  }

  if (Number.isInteger(len) && wordsByLen.has(len)) return wordsByLen.get(len)
  else return `The string doesn't have any words with a length of ${len}`

}

findWordsByLen(str, 'max');     // => Set(1) { 'performance' }
findWordsByLen(str, 'min');     // => Set(4) { 'is', 'to', 'in', 'of' }
findWordsByLen(str, 8);         // => Set(2) { 'critical', 'diabetes' }


findWordsByLen(str, 'all');
/* OUTPUT:
Map(9) {
  5 => Set(5) { 'Sleep', 'sleep', 'brain', 'These', 'heart' },
  2 => Set(4) { 'is', 'to', 'in', 'of' },
  8 => Set(2) { 'critical', 'diabetes' },
  3 => Set(5) { 'for', 'Not', 'can', 'and', 'the' },
  4 => Set(5) { 'good', 'lead', 'long', 'term', 'risk' },
  6 => Set(3) { 'health', 'enough', 'stroke' },
  7 => Set(4) { 'getting', 'greater', 'include', 'disease' },
  10 => Set(2) { 'diminished', 'conditions' },
  11 => Set(1) { 'performance' }
}
*/
codeager