Есть ли другой способ найти и вернуть объект массива? - PullRequest
0 голосов
/ 21 апреля 2020

Вот мой код: https://repl.it/@OllySmith1 / DaringSaltyText-1 ; Даже если я запускаю searchContact (), он возвращает правильный ответ, но все равно выбрасывает эту ошибку. Кстати, есть ли способ найти объект внутри массива в этой ситуации?

TypeError

Ответы [ 3 ]

1 голос
/ 21 апреля 2020

Вам необходимо снова защитить случай, когда contacts - пустой массив.

Индекс ноль пустого массива будет undefined. Попытка проверить свойство для этого значения приведет к ошибке.

Решение состоит в том, чтобы защитить вашу проверку массива контактов.

Например:

if(!contacts.length) return
1 голос
/ 21 апреля 2020

Вот, у вас изначально не загружен контакт , а во-вторых, вы зацикливаетесь больше, чем его массивы, тогда рабочая ссылка https://repl.it/repls/ImperturbableImperturbableAbstractions

var fs = require('fs');
var readlineSync = require('readline-sync');
var Member = require('./dataAnalyze');
const uuidv4 = require("uuid/v4");

const contacts = [];

function main() {
    loadData();
    showMenu();
}

function loadData() {
    var data = fs.readFileSync('./data.json', { encoding: 'utf8' });
    var data1 = JSON.parse(data);
    contacts.push(data1) // initial push the data to contact array
}

function showContacts() {
    console.log("Contact List")  // add the console
    for (let contact of contacts) {
        console.log("Name:", contact.name, "phoneNo:",contact.phone, "Id:",contact.id); // modify the console
    };
    return contacts;
}

function showMenu() {
    console.log('1.show contacts');
    console.log('2.add contact');
    console.log('3.edit contact');
    console.log('4.delete contact');
    console.log('5.search contact');
    console.log('6.sort contact');
    console.log('7.sort phone');
    console.log('8.save and exit');
    // loadData();
    var option = readlineSync.question('> ')
    switch (option) {
        case '1':
            showContacts();
            showMenu();
            break;
        case '2':
            addContact();
            showMenu();
            break;
        case '3':
            editContact();
            showMenu();
            break;
        case '4':
            deleteContact();
            showMenu();
            break;
        case '5':
            searchContact();
            showMenu();
            break;
        case '6':
            sortContact();
            showMenu();
            break;
        case '7':
            sortPhone();
            showMenu();
            break;
        case '8':
            saveAndExit();
            Break;
        default:
            console.log('wrong option');
            break;
    }
}

function addContact() {
    var name = readlineSync.question('What is your name?');
    var phone = readlineSync.question('what is your phone number?');
    var id = uuidv4();
    var contact = new Member(name, phone, id);
    contacts.push(contact);
}

function searchContact() {
    showContacts();
    var nameStr = readlineSync.question('Which name?');
    var phoneNum = readlineSync.question('Which phone?');
    for (var i = 0; i < contacts.length; i++) // remove the =, it will give error array out of bound
    {
        if (!nameStr || !phoneNum) { console.log('invalid Id') }
        else if (contacts[i].name.match(nameStr.toLowerCase().trim())) { console.log(contacts[i]) }
        else if (contacts[i].phone.toString().match(phoneNum.trim())) { console.log(contacts[i]) }
    }
    // var result = contacts.map(contact => {
    //   if(contact.name.includes(nameStr.toLowerCase().trim())){
    //     console.log(contact);
    //   }else if(contact.phone.toString().includes(phoneNum.trim())){
    //     console.log(contact);
    //   }
    // })
}

function editContact() {
    showContacts();
    var nameStr = readlineSync.question('Which name?');
    var phoneNum = readlineSync.question('Which phone?');
    for (var i = 0; i < contacts.length; i++)  // remove the = 
    {
        if (!nameStr || !phoneNum) { console.log('invalid Id') }
        else if (contacts[i].name.match(nameStr.toLowerCase().trim())) { contacts[i].name.split(contacts[i].name).join(nameStr) }
        else if (contacts[i].phone.toString().match(phoneNum.trim())) { contacts[i].phone.toString().split(contacts[i].phone).join(nameStr) }
    }
}

main();
1 голос
/ 21 апреля 2020

first: строка 116 должна быть {contacts[i.name]}.

Тогда ваша ошибка в строке 95. Вы выполняете итерацию с i=0 до i <= contacts.length. Если у вас есть 1 контакт, i=0 ваш первый контакт. i=1 не будет иметь значения тогда.

Таким образом, вы должны выполнить итерацию до for (var i = 0; i < contacts.length; i++)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...