2016-12-15 3 views
1

Я совершенно новый, поэтому извините за любые ошибки. Я искал решение, но не мог найти ничего, что отвечало на мой вопрос, или, по крайней мере, все, что я мог понять.Проверка ввода массива - Javascript

Так вот: Я хотел бы перебирать каждый объект в этом массиве и проверять, совпадает ли firstName («Akira» в этом случае) с любым из первых имен в моем массиве «контактов». На этом этапе я просто хотел бы вернуть индексный номер объекта (если это возможно). Если нет, сообщите мне, как я могу это сделать, в самом элементарном, 5-летнем варианте. Спасибо!

var contacts = [ 
{ 
    "firstName": "Akira", 
    "lastName": "Laine", 
    "number": "0543236543", 
    "likes": ["Pizza", "Coding", "Brownie Points"] 
}, 
{ 
    "firstName": "Harry", 
    "lastName": "Potter", 
    "number": "0994372684", 
    "likes": ["Hogwarts", "Magic", "Hagrid"] 
}, 
{ 
    "firstName": "Sherlock", 
    "lastName": "Holmes", 
    "number": "0487345643", 
    "likes": ["Intriguing Cases", "Violin"] 
}, 
{ 
    "firstName": "Kristian", 
    "lastName": "Vos", 
    "number": "unknown", 
    "likes": ["Javascript", "Gaming", "Foxes"] 
} 

function lookUpProfile(firstName, prop){ 
    for (var i = 0; i < contacts.length; i++) { 
    if (contacts[i][firstName] == firstName){ 
     return i; 
    } 
    } 
} 

lookUpProfile("Akira", "likes"); 
+0

вар ответ = lookUpProfile ("Акира"); –

ответ

0

ваш код ошибки у вас нет закрытия «]» для контактов с переменной, а также при доступе к свойствам объекта с помощью кода contacts[i]["firstname"]

var contacts = [ 
 
{ 
 
    "firstName": "Akira", 
 
    "lastName": "Laine", 
 
    "number": "0543236543", 
 
    "likes": ["Pizza", "Coding", "Brownie Points"] 
 
}, 
 
{ 
 
    "firstName": "Harry", 
 
    "lastName": "Potter", 
 
    "number": "0994372684", 
 
    "likes": ["Hogwarts", "Magic", "Hagrid"] 
 
}, 
 
{ 
 
    "firstName": "Sherlock", 
 
    "lastName": "Holmes", 
 
    "number": "0487345643", 
 
    "likes": ["Intriguing Cases", "Violin"] 
 
}, 
 
{ 
 
    "firstName": "Kristian", 
 
    "lastName": "Vos", 
 
    "number": "unknown", 
 
    "likes": ["Javascript", "Gaming", "Foxes"] 
 
}]; 
 

 
function lookUpProfile(firstName, prop){ 
 
    var ret = -1; 
 
    for (var i = 0; i < contacts.length; i++) { 
 
    if (contacts[i]["firstName"] == firstName){ 
 
     ret = i; 
 
    } 
 
    } 
 
    console.log(ret); 
 
} 
 

 

 
    lookUpProfile("Akira", "likes");

0

вы можете обратиться this ответ , - лучший способ доступа к объектам JSON.

function lookUpProfile(firstName, prop){ 
     for (var i = 0; i < contacts.length; i++) { 
     if (contacts[i]["firstName"] == firstName){ 
      return i; 
     } 
     } 
    } 

или

function lookUpProfile(firstName, prop){ 
    for (var i = 0; i < contacts.length; i++) { 
    if (contacts[i].firstName == firstName){ 
     return i; 
    } 
    } 
} 
0

свойства объекта могут быть accessed по точечной нотации, или ваши должны кавычки ключ, как это строка.

if (contacts[i].firstName == firstName){ 
    return i; 
} 

проверка fiddle

0

Вы забыли закрыть контакты массива и называемое свойство неправильно внутри функций

var contacts = [ 
 
\t { 
 
\t \t "firstName": "Akira", 
 
\t \t "lastName": "Laine", 
 
\t \t "number": "0543236543", 
 
\t \t "likes": ["Pizza", "Coding", "Brownie Points"] 
 
\t }, 
 
\t { 
 
\t \t "firstName": "Harry", 
 
\t \t "lastName": "Potter", 
 
\t \t "number": "0994372684", 
 
\t \t "likes": ["Hogwarts", "Magic", "Hagrid"] 
 
\t }, 
 
\t { 
 
\t \t "firstName": "Sherlock", 
 
\t \t "lastName": "Holmes", 
 
\t \t "number": "0487345643", 
 
\t \t "likes": ["Intriguing Cases", "Violin"] 
 
\t }, 
 
\t { 
 
\t \t "firstName": "Kristian", 
 
\t \t "lastName": "Vos", 
 
\t \t "number": "unknown", 
 
\t \t "likes": ["Javascript", "Gaming", "Foxes"] 
 
\t } 
 
]; 
 

 
function lookUpProfile(firstName, prop){ 
 
    for (var i = 0; i < contacts.length; i++) { 
 
    if (contacts[i].firstName === firstName){ 
 
    console.log(i); 
 
     return i; 
 
    } 
 
    } 
 
} 
 

 
lookUpProfile("Sherlock", "likes");

0

Вашего код путает переменный ПгвЬЫат к ключу имя.

В функции lookUpProfile, измените эту строку:

if(contacts[i].firstName == firstName) 

Explanation

0

Просто изменить свою функцию как -

function lookUpProfile(firstName, prop){ 
for (var i = 0; i < contacts.length; i++) { 
    if (contacts[i].firstName === firstName){ 
    return i; 
    } 
    } 
} 

И не использовать '==' Использование «== = 'в javaScript

0

У вашего кода есть некоторые незначительные ошибки, но, кроме тех, все выглядит хорошо для меня. Первая ошибка заключается в том, что вы не закрыли массив контактов. Вы открыли массив здесь: var contacts = [ и начали перечислять контакты, но после этого вам нужно закрыть этот массив с этим символом ].

И вторая проблема - это то, о чем вы действительно заботитесь. Когда вы проверяете firstName, вы передаете тот же параметр, который вы передаете функции, так как вы сказали, что вы не проверяете, contacts[i].firstName === "Akira", но contacts[i].Akira === "Akira". И ни один из объектов не имеет свойства Akira.

Вы можете попробовать contacts[i].firstName или contacts[i].["firstName"]. Оба помогут решить вашу проблему.

Вы можете найти более подробное объяснение здесь: http://www.w3schools.com/js/js_properties.asp

0

Глядя на аргументы, которые вы хотите принять в функции, я предполагаю, что вы хотите, свойство данного контакта.

Вы можете получить доступ к объекту объекта с использованием точечной нотации, например contacts[0].firstName.

Вы также можете получить к нему доступ, используя массив с соответствующим ключом, например contacts[0]["firstName"].

var contacts = [ 
 
{ 
 
    "firstName": "Akira", 
 
    "lastName": "Laine", 
 
    "number": "0543236543", 
 
    "likes": ["Pizza", "Coding", "Brownie Points"] 
 
}, 
 
{ 
 
    "firstName": "Harry", 
 
    "lastName": "Potter", 
 
    "number": "0994372684", 
 
    "likes": ["Hogwarts", "Magic", "Hagrid"] 
 
}, 
 
{ 
 
    "firstName": "Sherlock", 
 
    "lastName": "Holmes", 
 
    "number": "0487345643", 
 
    "likes": ["Intriguing Cases", "Violin"] 
 
}, 
 
{ 
 
    "firstName": "Kristian", 
 
    "lastName": "Vos", 
 
    "number": "unknown", 
 
    "likes": ["Javascript", "Gaming", "Foxes"] 
 
} 
 
]; 
 

 
function lookUpProfile(firstName, prop){ 
 
    for (var i = 0; i < contacts.length; i++) { 
 
    if (contacts[i].firstName == firstName){ 
 
    console.log(i); 
 
    return contacts[i][prop]; 
 
    } 
 
    } 
 
} 
 

 
console.log(lookUpProfile("Akira", "likes"));

0

ИТАК, начиная с функцией поиска:

// Prop parameter wasn't used so I removed it. 
function lookUpProfile(firstName){ 
    for (var i = 0; i < contacts.length; i++) { 
    // If you are using an array accessor for the properties you want to throw 
    // quotes around it. You could also access it like so contacts[i].firstName. 
    // What you had previously was using the value of "firstName" to try to 
    // access the "firstName" property. What your code actually tried was to 
    // access the "Akira" property which doesn't exist. 
    // 
    // Also until you get stronger in javascript it is safer to use the "===" 
    // strict equality as this checks for type and value equality. (ex 0 === "0" will be false) 
    if (contacts[i]['firstName'] === firstName){ 
     // By returning here you are saying that no other object can have the 
     // same "firstName" value. If that isn't true you will want to store 
     // the index in a variable outside of this loop and return it later. 
     // 
     // Another option here is to just return "contacts[i]" that way you 
     // have a reference to the object you are searching for. 
     return i; 
    } 
    } 
} 

В общем, когда начинал я предложил бы использовать строгое равенство ("==="/"== »), поскольку он будет вести себя более интуитивно и не будет раньше. Если вы используете «==»/«! =», Javascript будет пытаться преобразовать типы для вас, если они не совпадают, что может привести к непреднамеренному поведению.

0

Если вы напишете этот код, вы получите результат следующим образом: [0, undefined, undefined, undefined]. Где 0 - ваш совпадающий индекс символа.

var lookUpProfile = function(matchString) { var returnVal = function(item,index) { if(item.firstName == matchString) return index; }; return returnVal; };

var profileIndexHolder = contacts.map(lookUpProfile('Sherlock')) console.log(profileIndexHolder);

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