Поиск в массиве объектов ключей, содержащих два слова
Всем привет!
Только учусь JavaScript, столкнулся со следующей задачей: в программе задана переменная users, которая хранит в себе массив. Элементы данного массива являются объектами. Требуется определить индекс элемента, значение свойства role которого содержит больше одного слова. Результат вывести в консоль разработчика.
Пробую следующий код, но не подходит. Подскажите, пожалуйста, что не так - как-будто упустил какой-то момент при обучении. Буду рад уяснить и выучить, что упускаю:
const users = [{
login: "user1",
role: "Admin"
},
{
login: "user2",
role: "State user"
},
{
login: "user3",
role: "Moderator"
}
];
function findSpace(users) {
if (users.role.includes(/\s/)) {
return users.role
}
}
console.log(users.findIndex(findSpace));
Ответы (1 шт):
String.prototype.includes(аргумент не может быть регулярным выражением) Можно просто изменить регулярное выражение на пробел (это самое примитивное решение)
function findSpace(user) {
return user.role.includes(' ');
}
Более хороший способ будет выглядеть так, данное регулярное выражение будет сопоставлять любую последовательность символов без пробелов (здесь есть нюанс в том, что если строка будет пустая то String.prototype.match() - вернет null и вызов null.length даст ошибку):
function findSpace(user) {
return user.role.match(/\S+/g).length > 1;
}
Чтобы избежать ошибки из примера выше, можно использовать String.prototype.split():
function findSpace(user) {
return user.role.split(/\b\W+\b/).length > 1;
}
UPD P.S. Всё написанное выше, преследует исключительно научно-просветительные цели =))
Судя по комментариям автора, возникли некоторые сложности, вот ваш рабочий вариант, то что нужно скопировать к себе в файл:
const users = [
{ login: 'user1', role: 'Admin' },
{ login: 'user2', role: 'State user' },
{ login: 'user3', role: 'Moderator' },
];
function findSpace(user) {
return user.role.split(/\b\W+\b/).length > 1;
}
console.log(users.findIndex(findSpace));