Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/21: Рейтинг темы: голосов - 21, средняя оценка - 4.81
1 / 1 / 0
Регистрация: 21.01.2016
Сообщений: 19

Адресная книга

12.04.2019, 14:18. Показов 4153. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите пожалуйста. Не работает команда REMOVE_PHONE

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
var addressBook = function (command){
    var cmd = command.split(' ');
 
    if (cmd[0] == 'ADD') {
        var name = cmd[1];
        var number = cmd[2].split(',');
        if(!addressBook.hasOwnProperty(name)){
            addressBook[name] = number;
        }
        else {
            number.forEach(function(num) {
            if(!addressBook[name].hasOwnProperty(num)) {
                addressBook[name].push(num); 
            }
        });}
    console.log(cmd);
    }
 
    if (cmd[0] == 'REMOVE_PHONE') {
        var numberDel = command.split(' ')[1];
        for(var name in addressBook){
            for(var number in addressBook[name]){
                if(number == numberDel){
                    if(Object.keys(addressBook[name]).length == 1){
                    delete addressBook[name];
                    } else{
                    delete addressBook[name][number];
                    }
                return true;
                }
            }
        }
    return false;
    }
 
    if (cmd[0] == 'SHOW'){
        var str = [];
        for(var name in addressBook){
            str.push(name + ': ' + addressBook[name].join(', '));
        }
        str.sort();
    console.log(str);
    return str;
    }
};
addressBook('ADD Ivan 555-10-01,555-10-03');
addressBook('ADD Ivan 555-10-02');
addressBook('SHOW');
 
addressBook('REMOVE_PHONE 555-10-03');
addressBook('SHOW');
 
addressBook('REMOVE_PHONE 555-20-01');
addressBook('SHOW');
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.04.2019, 14:18
Ответы с готовыми решениями:

Книга!
подскажите книгу хорошую, а лучше ссылку:), хочу изучить язык яваскрипты, буду очень благодарен:)

Адресная книга
Доброго времени суток. Нужно написать адресную книгу в Делфи. что был поиск по фамилии, по адресу ...когда вводишь фамилию выводил адрес...

Адресная книга
Дали задание создать класс с добавлением, удалением и выводом знчаений на экран...и это все в динамическом массиве да и еще ассоциативно. ...

9
 Аватар для Egor.S
215 / 180 / 79
Регистрация: 02.10.2011
Сообщений: 651
12.04.2019, 15:58
Зарефакторил в лоб, вроде работает
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
const addressBook = (function() {
  let records = [];
 
  return {
    add(name, phone) {
      const idx = records.findIndex(el => el.name === name);
      if (idx >= 0) {
        const savedPhones = records[idx].phone;
        const newPhones = phone.split(',');
        records[idx].phone = [...new Set([...savedPhones, ...newPhones])].join(',')
      } else {
        records.push({
          name,
          phone
        })
      }
    },
    remove(phone) {
      records = records.map(r => {
        if (r.phone.includes(phone)) {
          const savedPhones = r.phone.split(',');
          const idx = savedPhones.findIndex(sp => sp === phone);
          savedPhones.splice(idx, 1).join(',')
          return {
            ...r,
            phone: savedPhones
          }
        }
        return r;
      })
    },
    show() {
      if (!records || !records.length) {
        return false;
      }
      records.forEach(r => console.log(`${r.name} ${r.phone}`))
    }
  }
}())
 
addressBook.add('Ivan', '555-10-01,555-10-03');
addressBook.show();
addressBook.remove('555-10-03');
addressBook.show();
1
1 / 1 / 0
Регистрация: 21.01.2016
Сообщений: 19
12.04.2019, 16:11  [ТС]
Такой косяк что нельзя использовать ES6(
И значения будут передаваться в таком виде:
JavaScript
1
2
3
addressBook('ADD Ivan 555-10-01,555-10-03');
addressBook('ADD Ivan 555-10-02');
addressBook('SHOW');
0
1 / 1 / 0
Регистрация: 21.01.2016
Сообщений: 19
12.04.2019, 16:27  [ТС]
Он почему-то упирается в фолс. Сравнивает не те элементы
Миниатюры
Адресная книга  
0
 Аватар для Egor.S
215 / 180 / 79
Регистрация: 02.10.2011
Сообщений: 651
12.04.2019, 16:53
Лучший ответ Сообщение было отмечено Cardinal_Firefl как решение

Решение

23 строка if (addressBook[name][number] == numberDel)

но лучше порефачить конечно
1
1 / 1 / 0
Регистрация: 21.01.2016
Сообщений: 19
12.04.2019, 16:58  [ТС]
Спасибо, теперь работает
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
12.04.2019, 17:56
Провел рефакторинг.
Отделил ассоциативный массив адресной книги от функции. Теперь смысл стал вменяемым.

То есть адресная книга условно стала "статическим полем" модуля скрипта,
а функция addressBook() условно стала "статическим методом" модуля скрипта.

Не надо смешивать объект данных с объектом функции. По смыслу - белиберда.
Функция тут просто обрабатывает некий отдельный ассоциативный массив.
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
        var book = {};
        function addressBook(command) {
            var cmd = command.split(' ');
            switch (cmd[0]) {
                case 'ADD':
                    var name = cmd[1];
                    var number = cmd[2].split(','); // Массив номеров телефонов
                    if (!(name in book)) {
                        book[name] = number;
                    }
                    else {
                        number.forEach(function (num) {
                            if (book[name].indexOf(num) === -1) {
                                book[name].push(num);
                            }
                        });
                    }
                    break;
                case 'REMOVE_PHONE':
                    var numberDel = cmd[1];
                    for (var name in book) {
                        var index = book[name].indexOf(numberDel);
                        if (index >= 0) {
                            if (book[name].length > 1)
                                book[name].splice(index, 1);
                            else
                                delete book[name];
                        }
                    }
                    break;
                case 'SHOW':
                    var str = [];
                    for (var name in book) {
                        str.push(name + ': ' + book[name].join(', '));
                    }
                    str.sort();
                    console.log(str);
                    break;
            }
        };
        addressBook('ADD Ivan 555-10-01,555-10-03');
        addressBook('ADD Ivan 555-10-02');
        addressBook('ADD Ivan 555-10-01,555-10-03,555-10-04');
        addressBook('SHOW');
 
        addressBook('REMOVE_PHONE 555-10-03');
        addressBook('SHOW');
 
        addressBook('ADD Maria 555-20-02');
        addressBook('SHOW');
        addressBook('REMOVE_PHONE 555-20-02');
        addressBook('SHOW');
        addressBook('REMOVE_PHONE 555-20-01');
        addressBook('SHOW');
1
1 / 1 / 0
Регистрация: 21.01.2016
Сообщений: 19
12.04.2019, 22:28  [ТС]
Только он когда когда функция выполняет 2 SHOW она выводи 2 массива.
В 1 одном удалённые данные и второй с не удалённым номером...
JavaScript
1
2
3
4
5
6
7
8
addressBook('ADD Ivan 555-10-01,555-10-03');
addressBook('ADD Ivan 555-10-02');
addressBook('SHOW');
addressBook('REMOVE_PHONE 555-10-03');
addressBook('ADD Alex 555-20-01');
addressBook('SHOW');
addressBook('REMOVE_PHONE 555-20-01');
addressBook('SHOW');
Миниатюры
Адресная книга  
0
1 / 1 / 0
Регистрация: 21.01.2016
Сообщений: 19
29.04.2019, 16:53  [ТС]
Помогите пожалуйста исправить баг.
Есть функция добавления и удаления контактов.

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
var addressBook;
 
    function addressBook(command){
    var cmd = command.split(' ');
    
    if (cmd[0] == 'ADD') {
        var name = cmd[1];
        var number = cmd[2].split(',');
        if(!addressBook.hasOwnProperty(name)){
            addressBook[name] = number;
        }
        else {
            number.forEach(function(num) {
            if(!addressBook[name].hasOwnProperty(num)) {
                addressBook[name].push(num); 
            }
        });}
    console.log(cmd);
    }
 
    if (cmd[0] == 'REMOVE_PHONE') {
        var numberDel = command.split(' ')[1];
        for(var name in addressBook){
            for(var number in addressBook[name]){
                if (addressBook[name][number] == numberDel){
                    if(Object.keys(addressBook[name]).length == 1){
                        delete addressBook[name];
                    } else{
                        delete addressBook[name][number];
                    }
                return true;
                }
            }
        }
    return false;
    }
 
    if (cmd[0] == 'SHOW'){
        var str = [];
        for(var name in addressBook){
            str.push(name + ': ' + addressBook[name].join(', '));
        }
        str.sort();
    console.log(str);
    return str;
    }
};
addressBook('ADD Ivan 555-10-01,555-10-03');
addressBook('ADD Ivan 555-10-02');
addressBook('SHOW');
addressBook('REMOVE_PHONE 555-10-03');
addressBook('ADD Alex 555-20-01');
addressBook('SHOW');
addressBook('REMOVE_PHONE 555-20-01');
addressBook('SHOW');
В телефонной книге должно быть: ["Alex: 555-20-01", "Ivan: 555-10-01, 555-10-02"], а выводит["Alex: 555-20-01", "Ivan: 555-10-01, , 555-10-02"]. Появляется лишняя запетая при функции REMOVE_PHONE

 Комментарий модератора 

Правила форума

4. Порядок создания тем.
4.13 Если на ваш вопрос долгое время нет ответа, уточните его, приведите дополнительные сведения, которые могут помочь участникам форума решить вашу проблему.
4.14 Чтобы "поднять" тему в разделе и поиске по форуму, используйте осмысленные сообщения, например "Тема/проблема/задача актуальна". Если вы чего-то достигли в решении проблемы на этот момент, сообщите об этом.

5. Запреты и ограничения.
5.5 Запрещено размещать тему в нескольких подразделах одного раздела одновременно (кросспостинг), а также дублировать тему в одном разделе.
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
29.04.2019, 17:16
Cardinal_Firefl, здравствуйте.
Мы уже решили эту задачу.
Адресная книга

Не надо называть данные и функцию, обрабатывающую эти данные, одинаковым именем. Очень некрасиво по смыслу.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.04.2019, 17:16
Помогаю со студенческими работами здесь

Адресная книга
Здравствуйте, мне нужно создать адресную книгу. Программа должна позволять вводить ФИО абонента, домашний и рабочий адрес, телефоны, и...

адресная книга на C#
Подскажите, пожалуйста. Нужно написать записную книжку, на подобие стандартной адресной книги windows. С одной стороны treeview, в котором...

Адресная книга
В Виндах у почтовых программ, адрессная книга должна храниться в каком-то файле (наверное). Не подскажете в каком именно. Плиззз. ...

Адресная книга
Доброе утро. Итак, сначала ситуация, в кратце: Есть Webshere Portal 6.0.1 и Domino Server 7.0.1. Портал настроен на аутентификацию...

Адресная книга
AlphaSkin, RichView.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3, Box2D, FreeType и SDL3_ttf из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru