Array.splice () показывает слишком много - PullRequest
1 голос
/ 11 октября 2019

У меня проблема с соединением. У меня есть код

const findMissingLetter=(array)=>{
  let result,alphabet = "abcdefghijklmnopqrstuvwxyz";
  if(array[0]===array[0].toUpperCase()) alphabet = alphabet.toUpperCase();
  let start = alphabet.split('').indexOf(array[0]);
  return alphabet.split('').splice(start,start+array.length+1);
}

Эта функция должна найти пропущенную букву в алфавите и вернуть это

Аргумент содержит только строчные или заглавные буквы. Проблема в этом коде состоит в том, что если я использую его в аргументах:

['a','b','c','d','f'] - тогда он работает хорошо, возвращая ['a', 'b', 'c', 'd', 'e', 'f']

, но если у меня есть заглавные буквы: ['O','Q','R','S'] - затем возвращается ['O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'].

const findMissingLetter = (array) => {
  let result, alphabet = "abcdefghijklmnopqrstuvwxyz";
  if (array[0] === array[0].toUpperCase()) alphabet = alphabet.toUpperCase();
  let start = alphabet.split('').indexOf(array[0]);
  return alphabet.split('').splice(start, start + array.length + 1);
}

console.log(findMissingLetter(['a','b','c','d','f']));
console.log(findMissingLetter(['O','Q','R','S']));

Где может быть проблема?

1 Ответ

0 голосов
/ 11 октября 2019

Вам нужно только array.length + 1 без начального индекса, потому что это требуемая длина массива результатов.

const findMissingLetter = array => {
    let alphabet = Array.from("abcdefghijklmnopqrstuvwxyz");

    if (array[0] === array[0].toUpperCase()) alphabet = alphabet.map(c => c.toUpperCase());

    let start = alphabet.indexOf(array[0]);

    return alphabet.splice(start, array.length + 1);
}

console.log(...findMissingLetter(['a', 'b', 'c', 'd', 'f'])); // ['a', 'b', 'c', 'd', 'e', 'f']
console.log(...findMissingLetter(['O', 'Q', 'R', 'S'])); // ['O', 'P', 'Q', 'R', 'S']
...