Массив объектов возвращает объект, когда условие соответствует - PullRequest
7 голосов
/ 03 апреля 2019

У меня есть массив, в котором есть значение id, адрес электронной почты и пароль.

let array = [
 {id: hyu, email: a@a.com, password: 123},
 {id: rft, email: b@b.com, password: 456},
 {id: ght, email: c@c.com, password: 789},
 {id: kui, email: d@d.com, password: 679}
]

Теперь я хотел бы вернуть этот объект, когда мое условие соответствует.Для этого я создал функцию, используя функцию javascript some, но я хочу вернуть объект, и мы знаем, что функция some возвращает логическое значение.

Я понятия не имею, как это сделать.

Мой код:

const isEmailExists = (email, array) => {
  return array.some(function(el) {
    return el.email === email;
  });
};

if (isEmailExists("c@c.com", array) == true) {
  // I want to work here with returned objects i.e on success case
} else {
  // error case
}

Любая помощь очень ценится

Ответы [ 5 ]

9 голосов
/ 03 апреля 2019

Если адрес электронной почты уникален, вы можете использовать find(). Это вернет null, если электронная почта не существует.

let array = [{"id":"hyu","email":"a@a.com","password":123},{"id":"rft","email":"b@b.com","password":456},{"id":"ght","email":"c@c.com","password":789},{"id":"kui","email":"d@d.com","password":679}];

const getObject = (email, array) => {
  return array.find(function(el) {
    return el.email === email;
  }) || null;
};

console.log(getObject("c@c.com", array));

Укороченная версия:

const getObject = (email, array) => array.find(el => el.email === email ) || null;
9 голосов
/ 03 апреля 2019

Вы можете использовать .filter() и проверить, имеет ли отфильтрованный массив длину более 0:

let array = [
 {id: 'hyu', email: 'a@a.com', password: 123},
 {id: 'rft', email: 'b@b.com', password: 456},
 {id: 'ght', email: 'c@c.com', password: 789},
 {id: 'kui', email: 'd@d.com', password: 679}
]

let filtered = array.filter(row => row.email === 'a@a.com');

console.log(filtered);

if (filtered.length > 0) { /* mail exists */ }
else { /* mail does not exist */ }
1 голос
/ 03 апреля 2019

Используйте find(), а не filter(), когда ожидаете ноль или одно совпадение. find() вернет undefined, если совпадения не найдены и поскольку undefined ложно и любой объект верен, вы можете использовать возвращаемое значение в качестве условия для предложения if напрямую.

const array = [
 {id: 'hyu', email: 'a@a.com', password: 123},
 {id: 'rft', email: 'b@b.com', password: 456},
 {id: 'ght', email: 'c@c.com', password: 789},
 {id: 'kui', email: 'd@d.com', password: 679}
]

const mail = array.find(row => row.email === 'a@a.com');

if (mail) {
  // Do stuff with mail
  console.log(mail);
} else {
  // Handle error
}
1 голос
/ 03 апреля 2019

Вы можете взять функцию и передать ключ и значение и отфильтровать массив.

function getObjects(array, key, value) {
    return array.filter(object => object[key] === value);
}

let array = [{ id: 'hyu', email: 'a@a.com', password: 123 }, { id: 'rft', email: 'b@b.com', password: 456 }, { id: 'ght', email: 'c@c.com', password: 789 }, { id: 'kui', email: 'd@d.com', password: 679 }];

console.log(getObjects(array, 'email', 'c@c.com'));
0 голосов
/ 03 апреля 2019
const found = array.find(item => (item.email === 'a@a.com')) || null;
console.log(found);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...