Программа не проходит тесты

Стоит задача реализовать функцию, через которую можно управлять телефонной книгой.

Для управления телефонной книгой нужно реализовать три команды:

  • ADD — добавляет контакт

  • SHOW —возвращает содержимое телефонной книг

  • REMOVE_PHONE — удаляет номер

Команда ADD Добавляет контакт в телефонную книгу со списком телефонов. Телефоны перечисляются через запятую. Если такой контакт существует, то команда пополняет список телефонов контакта Пример команды ADD: ADD Ivan 555-10-01,555-10-03.

Команда REMOVE_PHONE Удаляет телефон из телефонной книги. Если телефон успешно удалён, то функция должна вернуть true. Если такого телефона в телефонной книге не существует, то возвращается false.

Команда SHOW Возвращает массив контактов с их телефонами. Массив содержит строчки вида: "Имя: Телефон1, Телефон2". Массив должен быть отсортирован по имени контакта. Телефоны идут в порядке добавления их в телефонную книгу. Контакт с пустым списком телефонов не должен возвращаться.

Я очень слаб в js,поэтому написал (говно)код,который проходит 3 теста из 13(они закрытые). Если выполнять код на локальной машине,то все соответствует образцу. Пожалуйста,подскажите, где программа ведет себя или может вести себя неправильно,уже все перерыл. Буду очень благодарен за любую помощь. Спасибо. P.s - написал комментарии скорее для себя, что бы было понимание происходящего. Если они тупые и очевидные,прошу прощения.

var phoneBook = {}; // используем структуру объекта,где свойство - имя, значение - массив номеров,принадлежащих этому имени.

/**
 * @param {String} command
 * @returns {*} - результат зависит от команды
 */
module.exports = function  (command) {  //для того,что бы вызывать из другого файла
    
 
    commands  = command.split(' '); 
    indef = commands[0]; //первый элемент в строке - команда
    

    if(indef == 'ADD'){
        name = commands[1]; //2 - имя
        numbers = commands[2].split(','); //3 - строка с номерами через запятую,которую приводим к массиву 
        
        if(!phoneBook.hasOwnProperty(name)){ //если такого имени нету в объекте
            phoneBook[name] = numbers;  //добавляем его и соотносим с массивом номеров
        }
        else {  //если имя есть
            
            for(i = 0; i < numbers.length; i++){
                
                phoneBook[name].push(numbers[i]); //добавляем в уже существующий массив номера
                
            }
        }
        
    }
    
    
    else if(indef == 'REMOVE_PHONE') {
        numb_remove = commands[1];
        for(name in phoneBook){     //перебираем имена
            if(phoneBook[name].includes(numb_remove)){ //перебираем номера и если есть
                x = phoneBook[name].indexOf(numb_remove); //получаем его индекс
                phoneBook[name].splice(x,1);//удаляем из объекта
                return true;
            }
         
        }
        return false;
        
    
    }
    
    
    
    else if(indef = 'SHOW'){
        var names = Object.keys(phoneBook).sort(); //получаем список имен и сортируем его
        
        var book = ['\n'];                        //создаем массив строк, который будет выводится на экран
        
        for (i = 0; i < names.length; i++){
            book.push(names[i] + ': ' + phoneBook[names[i]].join(',') + '\n'); //задание структуры name1: phone1,phone2
                                                                                                  // name2: phone1,phone2
        }
        if(book.length > 0){
            return book;
        }
         
            
    }
    
    
};

Ответы (1 шт):

Автор решения: vsemozhebuty

Постарался суммировать всё, что заметил в комментариях. Сравните на всякий случай. На детали форматирования можете не обращать внимания, я рихтовал код, чтобы мой линтер выдавал меньше ошибок.

'use strict';

const phoneBook = Object.create(null);

function main(command) {
  const commands  = command.split(' ');
  const [indef] = commands;

  if (indef === 'ADD') {
    const [, name] = commands;
    const numbers = commands[2].split(',');

    if (phoneBook[name] === undefined) {
      phoneBook[name] = numbers;
    } else {
      phoneBook[name].push(...numbers);
    }
  } else if (indef === 'REMOVE_PHONE') {
    const [, numb_remove] = commands;
    for (const name of Object.keys(phoneBook)) {
      if (phoneBook[name].includes(numb_remove)) {
        const x = phoneBook[name].indexOf(numb_remove);
        phoneBook[name].splice(x, 1);
        return true;
      }
    }
    return false;
  } else if (indef === 'SHOW') {
    const names = Object.keys(phoneBook).sort();
    const book = [];

    for (const name of names) {
      if (phoneBook[name].length > 0) {
        book.push(`${name}: ${phoneBook[name].join(',')}`);
      }
    }
    return book;
  }
}

console.log(main('SHOW'));
console.log(main('ADD A 555'));
console.log(main('ADD A 777'));
console.log(main('SHOW'));
console.log(main('ADD B 111,222'));
console.log(main('SHOW'));
console.log(main('REMOVE_PHONE 555'));
console.log(main('REMOVE_PHONE 222'));
console.log(main('REMOVE_PHONE 999'));
console.log(main('SHOW'));
console.log(main('REMOVE_PHONE 111'));
console.log(main('SHOW'));
console.log(main('ADD B 111'));
console.log(main('SHOW'));

→ Ссылка