js 练习题11-20

244 阅读1分钟

第11题:组数按一定规则返回字符串

likes [] // must be "no one likes this"

likes ["Peter"] // must be "Peter likes this"

likes ["Jacob", "Alex"] // must be "Jacob and Alex like this"

likes ["Max", "John", "Mark"] // must be "Max, John and Mark like this"

likes ["Alex", "Jacob", "Mark", "Max"] // must be "Alex, Jacob and 2 others like this"

代码1

function likes(names) {
      // TODO
      let res = '';
      switch(names.length){
        case 0 :
          res = 'no one likes this';
          break;

        case 1 :
          res = names[0]+' likes this';
          break;

        case 2 :
          res = names[0]+' and '+names[1]+' like this';
          break;

        case 3 :
          res = names[0]+', '+names[1]+' and '+names[2]+' like this';
          break;

        default:
          res = names[0]+', '+names[1]+' and ' +(names.length-2) + " others like this";
          break;
      }
      return res
    }

代码2

function likes(names) {
  names = names || [];
  switch(names.length){
    case 0: return 'no one likes this'; break;
    case 1: return names[0] + ' likes this'; break;
    case 2: return names[0] + ' and ' + names[1] + ' like this'; break;
    case 3: return names[0] + ', ' + names[1] + ' and ' + names[2] + ' like this'; break;
    default: return names[0] + ', ' + names[1] + ' and ' + (names.length - 2) + ' others like this';
  }
}

代码3

function likes(names) {
  return {
    0: 'no one likes this',
    1: `${names[0]} likes this`, 
    2: `${names[0]} and ${names[1]} like this`, 
    3: `${names[0]}, ${names[1]} and ${names[2]} like this`, 
    4: `${names[0]}, ${names[1]} and ${names.length - 2} others like this`, 
  }[Math.min(4, names.length)]
}

第12题:编写一个调用的函数,该函数接受一个括号字符串,并确定括号的顺序是否有效。如果字符串有效,则函数应返回true;如果字符串入侵,则函数应返回false

"()"              =>  true
")(()))"          =>  false
"("               =>  false
"(())((()())())"  =>  true

代码1

function validParentheses(parens) {
  while(parens && parens.indexOf('()') !==-1){
    parens = parens.replace(/\(\)/g,'');
  }
  console.log(!parens)
  return !parens;
}

代码2

function validParentheses(parens){
  var n = 0;
  for (var i = 0; i < parens.length; i++) {
    if (parens[i] == '(') n++;
    if (parens[i] == ')') n--;
    if (n < 0) return false;
  }
  
  return n == 0;
}

代码3

function validParentheses(parens){
  var indent = 0;
  
  for (var i = 0 ; i < parens.length && indent >= 0; i++) {
    indent += (parens[i] == '(') ? 1 : -1;    
  }
  
  return (indent == 0);
}

第13题:解码莫斯电码 kata-Decode the Morse code

题目地址

代码1

decodeMorse = function (morseCode) {
 
  let arr = morseCode.trim().split('   ').map( item =>{
    return  item.split(' ').map(letter => {return MORSE_CODE[letter]}).join('');
  }).join(' ')
  console.log(arr);
return arr
}

代码2

decodeMorse = function(morseCode){
  function decodeMorseLetter(letter) {
    return MORSE_CODE[letter];
  }
  function decodeMorseWord(word) {
    return word.split(' ').map(decodeMorseLetter).join('');
  }
  return morseCode.trim().split('   ').map(decodeMorseWord).join(' ');
}

代码3

decodeMorse = function(morseCode){
  return morseCode
    .trim()
    .split(/  | /)
    .map( (code) => MORSE_CODE[code] || ' ')
    .join('');
}

第14题: 笑脸验证规则

每张笑脸必须包含一对有效的眼睛,可以将眼睛标记为:或;

笑脸可以有鼻子,但不是必须的。鼻子的有效字符为-或~

每个笑脸都必须有一个笑脸,嘴上应标有)或D。

除提到的字符外,不允许其他字符。

题目地址

countSmileys([':)', ';(', ';}', ':-D']);       // should return 2;
countSmileys([';D', ':-(', ':-)', ';~)']);     // should return 3;
countSmileys([';]', ':[', ';*', ':$', ';-D']); // should return 1;

代码1

function countSmileys(arr) { 
      ///[:;-~)D]/
      return arr.filter( item => {
        return /[:;][-~]?[)D]/.test(item)
      })

代码2

function countSmileys(arr) {
  return arr.filter(x => /^[:;][-~]?[)D]$/.test(x)).length;
}

代码3

const countSmileys = ss => ss.reduce((a, s) => a + /^[:;][-~]?[D)]$/.test(s), 0);