【问题标题】:is there another way to find and return a object of an array?还有另一种方法来查找并返回数组的对象吗?
【发布时间】:2020-08-03 22:52:49
【问题描述】:

这是我的代码:https://repl.it/@OllySmith1/DaringSaltyText-1; 即使我运行 searchContact(),它也会返回正确的答案,但仍然会抛出此错误。 顺便说一句,在这种情况下,有没有办法在数组中搜索对象?

【问题讨论】:

  • 请阅读How to Ask。与您的问题相关的代码总是 直接属于您的问题,采用文本形式且格式正确。 不要只是将其转储到某个外部平台上。错误消息也是如此。

标签: javascript arrays node.js object search


【解决方案1】:

在这里,您最初没有加载联系人,其次,您循环的不仅仅是它的数组,然后是 工作链接 @987654321 @

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();

【讨论】:

  • 非常感谢,这是循环的错误!无论如何谢谢!
  • 我已经添加了 cmets @TurTols 请检查一下
【解决方案2】:

首先:第 116 行必须是 {contacts[i.name]}

那么您的错误在第 95 行。您从 i=0 迭代直到 i &lt;= contacts.length。如果您有 1 个联系人,i=0 是您的第一个联系人。 i=1 将没有值。

所以你必须迭代到for (var i = 0; i &lt; contacts.length; i++)

【讨论】:

    【解决方案3】:

    您需要警惕contacts 为空数组的情况。

    空数组的索引为零将是undefined。尝试检查该值的属性将引发错误。

    解决方案是在您检查联系人数组时设置防护措施。

    例如:

    if(!contacts.length) return
    

    【讨论】:

    • 谢谢,请问有什么解决办法吗?我在循环之前有 console.log(contacts),它里面显然有一个对象。
    • 您可以像这样处理数组的属性:arr[0]arr[1] 等。您必须确保与您正在检索的任何索引关联的值不是 nullundefined , 在您尝试引用该值的属性之前。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-24
    • 2017-03-12
    • 2020-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-11
    相关资源
    最近更新 更多