2017-02-20 25 views
2

Я пытаюсь жестко кодировать систему входа в систему, потому что я пытался иметь два входа и проверять щелкнуть, соответствуют ли эти значения значениям в массиве, массив, имеющий два объекта для два возможных ответа ...Поиск в объекте внутри массива

Ну, я не могу заставить его работать, все Suden моих переменных не распознаются и общий код пошел капут ... вот это Pen

спасибо заранее!

код до сих пор кстати

$(".submit").click(function() { 

//bidimensional array 
var data = [{ 
    user: "cinco", 
    pw: "king" 
}, { 
    user: "manco", 
    pw: "wawa" 
}]; 
var name = $(".name").val(); 
var pass = $(".pw").val(); 

if (data.user.includes(name) && data.pw.includes(pass)) { 
    $(".check-input").addClass('valid'); 
} else { 
    $(".check-input").addClass('invalid'); 
    } 
}); 

$(".input").focus(function() { 
    $(".check-input").removeClass("valid"); 
    $(".check-input").removeClass("invalid"); 
}); 
+0

@mplungjan кажется, что он уже изменил его на свой код в загоне .. – baao

+0

@baao - ACH - упустил – mplungjan

ответ

5

Вы можете использовать find() как этот

if (data.find(v => v.user === name && v.pw === pass)) { ... } 

Пожалуйста, обратите внимание, что использование JavaScript в качестве логина весьма небезопасным, так как каждый может просто открыть консоль и читать полномочия.

Для вашего комментария, то => является частью arrow function, она сводится к

if (data.find(function(v) { 
    return v.user === name && v.pw === pass; 
})) { ... } 
+0

Я просто делаю это прямо сейчас, как личное упражнение – Miguel

+0

Просто хотел добавить примечание :) @Miguel – baao

+0

только одна вещь, что такое «v =>»? – Miguel

0
var data = [{ 
    user: "cinco", 
    pw: "king" 
}, { 
    user: "manco", 
    pw: "wawa" 
}]; 

checkLogin(usr, pwd){ 
    for(var index in data) { 
    var obj = data[index]; 
    if(obj.user == usr && obj.pw == pwd) { 
    return true; 
    } 
    } 
    return false; 
} 

checkLogin('chino', 'wrongPwd'); // returns false 
checkLogin('chino', 'king'); // returns true 
0

Вы должны получить доступ к отдельным объектам в массиве и получить user и pw свойства тех объекты. Сам массив не обладает этими свойствами.

Вот рабочая версия, которая также упрощает код:

$(".submit").click(function() { 
 

 
\t // This is not a bidimensional array. It's just an array of objects 
 
\t var data = [{ 
 
\t \t user: "cinco", 
 
\t \t pw: "king" 
 
\t }, { 
 
\t \t user: "manco", 
 
\t \t pw: "wawa" 
 
\t }]; 
 
    
 
\t var name = $(".name").val(); 
 
\t var pass = $(".pw").val(); 
 

 
    // You need to access the individual objects in the array and get 
 
    // the user and pw properties of those objects. The array itself 
 
    // doesn't have those properties. 
 
    
 
    // Loop through the array and check each object 
 
    // You can't return from a forEach loop, so we'll set up a variable 
 
    // that will be used after the loop is complete 
 
    var valid = false; 
 
    data.forEach(function(obj){ 
 
    // Don't check for inclusion of the data, check for exact match 
 
    \t if (obj.user === name && obj.pw === pass) { 
 
\t  valid = true; 
 
\t } 
 
    }); 
 
    
 
    // Now that the loop is done, set the validity 
 
    $(".check-input").addClass(valid ? 'valid' : 'invalid'); 
 
    
 
}); 
 

 
$(".input").focus(function() { 
 
\t $(".check-input").removeClass("valid"); 
 
\t $(".check-input").removeClass("invalid"); 
 
});
.check-input{ 
 
\t width:250px; 
 
\t height:40px; 
 
\t background-color:gray; 
 

 
} 
 
.valid{ 
 
\t background-color:green; 
 
} 
 

 
.invalid{ 
 
\t background-color:crimson; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="text" class="input name"> 
 
<input type="text" class="input pw"> 
 
<button class="submit">Submit</button> 
 
<div class="check-input"></div>

 Смежные вопросы

  • Нет связанных вопросов^_^