递增/递减数字和字母“ n”

时间:2020-06-20 01:15:32

标签: javascript

我有一个函数encryptString(string, shift)

  • 如果encryptString('c', 1),则c变成d

  • 如果参数为encryptString('c', -1),则c变为b

  • 如果shift大于26或小于0,则字母/数字回绕。在encryptString('a', 29)中,a的意思是`c。

我相信可以使用charCode()函数来解决此问题,但是我开始使用reduce,并希望使用已有的解决方案。

我在下面的尝试可以移动字母和数字,但前提是它们必须在数组长度之内。如果shift大于26,则不起作用。

我将不胜感激。

const encryptString = (str, shift) => {
  if(!str.match(/^[a-z0-9]+$/i)) { throw new Error }

    const caps = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split(''); 
    const letters = 'abcdefghijklmnopqrstuvwxyz'.split('');
    const numbers =  '123456789'.split('');

    const reduction = str.split('').reduce((a,b) => {
      caps.includes(b) ? b = caps[caps.indexOf(b) + shift] || caps[shift] : null;
      letters.includes(b) ? b = letters[letters.indexOf(b) + shift] || letters[shift] : null;
      numbers.includes(b) ? b = numbers[numbers.indexOf(b) + shift] || numbers[shift] : null;
      a.push(b);
      return a;
    }, [])

    return reduction.join('');
};

其他一些情况:

encryptString('JavaScript', 3) => 'MdydVfulsw' // passes
encryptString('mqblhw', -1) => 'lpakgv' // passes
encryptString('z956qau', 29) => 'c845tdx' //code above fails 
encryptString('password123', -266) => 'jummqilx567' // code above fails

0 个答案:

没有答案