如何搜索对象数组 - javascript

时间:2016-05-29 22:27:33

标签: javascript arrays

我在搜索对象数组时遇到问题。基本上我的页面需要做的是创建一个新的"客户端"使用我输入的信息,例如全名,用户名,电子邮件和密码。这些客户端中的每一个都是数组中的对象,如下所示。

var clientlist = [{"username":"John","fullname":"John Doe",
"email":"john.doe@hotmail.com","type":"client","password":"jdoe2"},

此客户端已在我的js文件中创建,我需要做的是创建一个新对象以添加到具有相同结构的此数组。例如,

var clientlist = [{"username":"Peter","fullname":"Peter Jones",
"email":"peter.jones@hotmail.com","type":"client","password":"pjones1"},

我已编写代码但它无法正常工作,我似乎无法搜索用户名以查看我添加的用户名是否已存在,这可能是语法错误。我将在下面留下完整的代码,并提前感谢您的帮助!

var clientlist = [{"username":"John","fullname":"John Doe",
"email":"john.doe@hotmail.com","type":"client","password":"jdoe2"},

var Client = {};

function NewClient(){
    var found;
    var user = $("#username").val();

    for (var i = 0; i < clientlist.length; i++) {
        if (clientlist[i] == user) {
            found = true;
        }else{
            found = false;
        }
    }

    if (found == true){
        $("#msj").html("User already exists!");
    }
    else if(found == false){
        Client["fullname"] = $("#fullname").val();
        Client["username"] = user;
        Client["email"] = $("#email").val();
        Client["type"] = "client";
        Client["password"] = $("#password").val();

        clientlist[clientlist.length] = Client;

        $("#msj").html("New client has been created");
    }
}

2 个答案:

答案 0 :(得分:1)

for循环的几个问题。

for (var i = 0; i < clientlist.length; i++) {
    if (clientlist[i] == user) {
    found = true;
}else{
    found = false;
}

那我们在做什么? clientlist是数组,因此clientlist[i]是该数组的元素......恰好是一个对象。

user值是一个字符串,因此无法将字符串等同于if中的对象。

更正将检查对象中的正确属性值:

if (clientlist[i].username == user) {

接下来的问题是,即使找到匹配,循环仍会继续。随着循环继续found将针对每次迭代进行更新。因此found将仅基于数组中的最后一个对象进行设置,无论是否已经确定匹配。

要纠正这种情况,可以将for循环放在函数中,以便在找到匹配项时返回true来中断循环。替代方案是使用其他数组方法,如Array.prototype.some(),它返回基于条件回调的布尔值。如果找到匹配项,则使用break以防止循环继续。

break最简单的插入代码,所以最终将是

for (var i = 0; i < clientlist.length; i++) {
    if (clientlist[i].username == user) {
    found = true;
    break;// quit loop since we found a match
}else{
    found = false;
}

答案 1 :(得分:0)

您需要更改此

for (var i = 0; i < clientlist.length; i++) {
    if (clientlist[i] == user) {
        found = true;
    }else{
       found = false;
    }
}

var found = false;
for (var i = 0; i < clientlist.length; i++) {
    if (clientlist[i].username == user) {
        found = true;
        break;
    }
}