Поиск совпадений по объектам массива

431
16 мая 2017, 04:27

Исходные данные:

Есть массив contacts, каждый его элемент - это объект со своими свойствами. Нужно сделать функцию, которая берет значение first и сравнивает его со всеми firstName массива. Если совпадение есть, то нужно вывести второе заданное значение.

В конкретном случае это значение lastName того же объекта. Я уже и так, и эдак пытался, ничего не выходит.

Такое ощущение что return contacts[i][prop]; просто не работает.

В результате должно вывести: "Vos"

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(first, prop) { 
  for (var i = 0; i < contacts.length; i++) { 
    if (contacts[i].firstName == first) { 
      document.write('First name has matches<BR>') 
      if (contacts[i].hasOwnProperty(prop)) { 
        document.write('Prop exist<BR>'); 
        return contacts[i][prop]; 
      } 
      return "No such property"; 
      break; 
    } 
  } 
  return "No such contact"; 
} 
 
lookUpProfile("Kristian", "lastName"); 
document.write(lookUpProfile());

Answer 1

Ваш код работает. Просто вы теряете значение Vos и выполняете второй раз с пустыми значениями в этом месте:

lookUpProfile("Kristian", "lastName");
document.write(lookUpProfile());

Поменяйте эти две строки на:

document.write(lookUpProfile("Kristian", "lastName"));

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(first, prop) { 
  for (var i = 0; i < contacts.length; i++) { 
    if (contacts[i].firstName == first) { 
      document.write('First name has matches<BR>') 
      if (contacts[i].hasOwnProperty(prop)) { 
        document.write('Prop exist<BR>'); 
        return contacts[i][prop]; 
      } 
      return "No such property"; 
      break; 
    } 
  } 
  return "No such contact"; 
} 
 
document.write(lookUpProfile("Kristian", "lastName"));

К слову, можно чуть-чуть модифицировать ваш код с использованием .find():

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(first, prop) { 
  let contact = contacts.find(function(c) { 
    return c.firstName === first; 
  }); 
  if (!contact) { 
    return "No such contact"; 
  } 
  if (!contact.hasOwnProperty(prop)) { 
    return "No such property"; 
  } 
 
  return contact[prop]; 
} 
 
document.write(lookUpProfile("Kristian", "lastName"));

READ ALSO
Не фиксировать определенный option в select

Не фиксировать определенный option в select

ЗдравствуйтеМой селект обрабатывается js

247
Uncaught SyntaxError: Unexpected end of JSON input

Uncaught SyntaxError: Unexpected end of JSON input

На сайте в консоли браузера возникает ошибка:

792
Сделать ссылку вместо текста jquery

Сделать ссылку вместо текста jquery

Есть в html документе таблица такого вида:

337